1、HDU 2104 hide handkerchief(数学),
小孩N个围成一圈,一次跳M个来数数,问能否遍历到所有小孩,辗转相除法求公约数。
#include <iostream> using namespace std; int gcd(int a,int b) { if(b==0) return a; return gcd(b,(a%b)); } int main() { int N,M; while(cin>>N>>M) { if(N==-1 && M==-1) break; else { int p=gcd(N,M); if(p==1) { cout<<"YES"<<endl; } else { cout<<"POOR Haha"<<endl; } } } return 0; }2、HDU 2095—— find your present (2)(简单数据结构)
找出只出现了一次的数。数组会超内存(只有1024K),用MAP比较好。
#include <iostream> #include <stdio.h> #include <map> #include <cstring> using namespace std; int main() { int testcase; while(cin>>testcase && testcase!=0) { map<int,int> numpack; for(int i=0;i<testcase;i++) { int temp; scanf("%d",&temp); numpack[temp]++; } map<int,int>::iterator it; for(it=numpack.begin();it!=numpack.end();it++) { if((*it).second==1) { cout<<(*it).first<<endl; } } } return 0; }
判断是不是直角三角形
#include <iostream> using namespace std; int istri(int a,int b,int c) { int big,other1,other2; if(a>b && a>c) { big=a; other1=b; other2=c; } else if(b>c && b>a) { big=b; other1=a; other2=c; } else if(c>a && c>b) { big=c; other1=a; other2=b; } else return false; if((other1*other1)+(other2*other2)==big*big) return true; else return false; } int main() { int testcase; cin>>testcase; for(int i=1;i<=testcase;i++) { int a,b,c; cin>>a>>b>>c; if(istri(a,b,c)) { cout<<"Scenario #"<<i<<":"<<endl; cout<<"yes"<<endl; cout<<endl; } else { cout<<"Scenario #"<<i<<":"<<endl; cout<<"no"<<endl; cout<<endl; } } return 0; }
N进制转10进制,注意字符串处理。
#include <iostream> #include <stack> #include <string> #include <stdlib.h> #include <cmath> #include <math.h> using namespace std; int numpack[1005]; int my_pow(int a,int b) { int resultwe=1; for(int i=1;i<=b;i++) { resultwe*=a; } return resultwe; } int decrov(string tarnum,string idxstr) { int idx=atoi(idxstr.c_str()); int tarnumer=atoi(tarnum.c_str()); int result=0; if(tarnumer<idx || idx==10) { return tarnumer; } for(int i=0;i<tarnum.size();i++) { //cout<<(tarnum[i]-48)<<(tarnum.size()-1)-i<<endl; result+=((tarnum[i]-48)*my_pow(idx,(tarnum.size()-1)-i)); } return result; } int main() { int testcase; while(cin>>testcase) { int ot=0; for(int i=0;i<testcase;i++) { string a,b,longtar; int pos1,pos2; cin>>longtar; pos1=longtar.find('(',0); pos2=longtar.find(')',0); for(int i=0;i<pos1;i++) a+=longtar[i]; for(int j=pos1+1;j<pos2;j++) b+=longtar[j]; ot+=decrov(a,b); } cout<<ot<<endl; } return 0; }