# CPE 一顆星 **紀錄CPE一顆星解題** UVA10019 Funny Encryption Method(進制轉換) --- ``` #include <iostream> using namespace std; int dToB(int value){ int number = 0; while(value>0){ if(value%2==1){number = number+1;} value = value /2; } return number; } int hToB(int value){ int number = 0; while(value>0){ int right = value %10; number = number + dToB(right); value = value /10; } return number; } int main() { int N=0; int value=0; cin>>N; while(N--){ cin>>value; cout<<dToB(value)<<" "<<hToB(value)<<endl; } return 0; } ``` UVA10189 Minesweeper(踩地雷) --- ``` #include <iostream> #include <map> using namespace std; int main(){ int r=0; int c=0; int k=1; int goal = 0; map<int,map<int,char>> field; cout<<"Field #"<<1<<":"<<endl; while(cin>>r>>c && r){ if(k++>1){cout<<endl<<"Field #"<<k-1<<":"<<endl;} for(int i=0;i<r;i++){ for(int j=0;j<c;j++){ cin>>field[i][j]; } } for(int i=0;i<r;i++){ for(int j=0;j<c;j++){ if(field[i][j]=='*'){ cout<<'*';continue; } #define field(i,j)(field[i][j]=='*') goal = field(i-1,j-1)+ field(i-1,j)+ field(i-1,j+1)+ field(i,j-1)+ field(i,j)+ field(i,j+1)+ field(i+1,j-1)+ field(i+1,j)+ field(i+1,j+1); cout<<goal; } cout<<endl; } } return 0; } ``` UVA10908 Largest Square(判斷相同英文的最大正方形) --- ``` #include <iostream> using namespace std; int main(){ int M = 0; int N = 0; int Q = 0; int r = 0; int c = 0; int T = 0; char grid[101][101]; bool flag = false; cin>>T; while(T--){ cin >> M >> N >> Q; cout<<M<<" "<<N<<" "<<Q<<endl; for(int i=0;i<M;i++){ cin >>grid[i]; } while(Q--){ cin>>r>>c; flag = false; for(int i=0;i<M || i<N;i++){ if(r-i<0 || c-i<0 || r+i>M || c+i>N){ cout<< 2*i-1 <<endl; break; } for(int x=r-i;x<=r+i;x++){ for(int y=c-i;y<=c+i;y++){ if(grid[x][y]!=grid[r][c]){ flag = true; break; } } } if(flag){ cout<< 2*i-1 <<endl; break; } } } } return 0; } ``` UVA10235 Simply Emirp(判斷是否為質數,且倒過來也是) --- ``` #include <iostream> #include <cmath> using namespace std; int isPrime(int n){ for(int i=2;i<=sqrt(n);i++){ if(n%i==0){ return 0; } } return 1; } int main(){ int n = 0; while(cin>>n){ int prime = 0; int n1 = n; int n2 = 0; prime = isPrime(n); if(prime==1){ while(n1>0){ n2 = n2*10+n1%10; n1 = n1 / 10; } if(n2!=n){ prime = 1 + isPrime(n2); } } if(prime==2){ cout<<n<<" is emirp."<<endl; }else if(prime == 1){ cout<<n<<" is prime."<<endl; }else{cout<<n<<" is not prime."<<endl;} } return 0; } ``` UVA10420 List of Conquests(計算主角總共在各個國家認識幾人) --- ``` #include <iostream> #include <map> #include <sstream> using namespace std; int main(){ map<string,int> maps; string sentence = ""; string firstWord = ""; getline(cin,sentence); while(getline(cin,sentence)){ stringstream ss(sentence); ss >> firstWord ; maps[firstWord]++; } for(auto mp:maps){ cout<<mp.first<<" "<<mp.second<<endl; } return 0; } ``` UVA10268 498bis(微分) --- ``` #include <iostream> #include <string> #include <sstream> #include <vector> using namespace std; int main(){ int x = 0; while(cin>>x){ long long sum = 0; string s =""; vector<int> v; getline(cin,s); getline(cin,s); stringstream ss(s); v.clear(); while(ss >> s){ v.push_back(stoi(s)); } if(v.size()==1){ cout<< 0 <<endl; }else{ long long pow =1; for(int i=1;i<v.size();i++){ sum = sum + i * pow * v[v.size()-i-1]; pow = pow * x ; } cout<< sum <<endl; } } return 0; } ``` UVA10922 2 the 9s(輸入N個有可能1000位元的數字,判斷是否為9個倍數,並計算Degree) --- ``` #include <iostream> #include <string> using namespace std; int findDegree9(string str,int degree){ int temp = 0; for(int i=0;i<str.length();i++){ temp = temp + str[i]-'0'; } if(temp == 9){ return degree + 1; }else if(temp < 9){ return 0; }else{ return findDegree9(to_string(temp),degree+1); } } int main(){ int degree = 0; string line = ""; while(cin>>line){ if(line == "0"){ break; } degree = findDegree9(line,0); if(degree == 0){ cout<<line<<" is not a multiple of 9."<<endl; }else{ cout<<line<<" is a multiple of 9 and has 9-degree "<<degree<<"."<<endl; } } return 0; } ``` UVA 10221 Satellites(計算弧和弦) --- ``` #include <iostream> #include <string> using namespace std; int findDegree9(string str,int degree){ int temp = 0; for(int i=0;i<str.length();i++){ temp = temp + str[i]-'0'; } if(temp == 9){ return degree + 1; }else if(temp < 9){ return 0; }else{ return findDegree9(to_string(temp),degree+1); } } int main(){ int degree = 0; string line = ""; while(cin>>line){ if(line == "0"){ break; } degree = findDegree9(line,0); if(degree == 0){ cout<<line<<" is not a multiple of 9."<<endl; }else{ cout<<line<<" is a multiple of 9 and has 9-degree "<<degree<<"."<<endl; } } return 0; } ``` UVA 10050 Hartals(霸會) --- ``` #include <iostream> using namespace std; int main(){ int T = 0; int N = 0; int P = 0; int hartal[101]; int workingDays = 0; cin>>T; while(T--){ cin >> N >> P; for(int i=0;i<P;i++){ cin >> hartal[i]; } workingDays = 0; for(int i=1;i<=N;i++){ if(i % 7 == 6 || i % 7 ==0){ continue; } for(int j=0;j<P;j++){ if(i % hartal[j] == 0){ workingDays++; break; } } } cout<<workingDays<<endl; } return 0; } ``` UVA 10226 Hardwood species(計算每顆樹出現的機率) --- ``` #include <iostream> #include <map> #include <string> #include <iomanip> using namespace std; int main(){ int N = 0; int c = 0; cin>>N; while(N--){ map<string,double>trees; string name =""; for(c;c<1;c++){ getline(cin,name); getline(cin,name);} double count = 0.0; double p = 0.0; while(getline(cin,name) && name !=""){ trees[name]++; count++; } for(auto mp:trees){ p = (mp.second / count )*100; cout<<fixed<<setprecision(4); cout<<mp.first<<" "<<p<<endl; } if(N>0){ cout<<endl; } } return 0; } ``` UVA 10415 Eb Alto saxophone Player(計算手指壓放的次數) --- ``` #include <iostream> #include <map> #include <string> using namespace std; int main(){ map<char,string>fingers; fingers[' ']="0000000000"; fingers['c']="0111001111"; fingers['d']="0111001110"; fingers['e']="0111001100"; fingers['f']="0111001000"; fingers['g']="0111000000"; fingers['a']="0110000000"; fingers['b']="0100000000"; fingers['C']="0010000000"; fingers['D']="1111001110"; fingers['E']="1111001100"; fingers['F']="1111001000"; fingers['G']="1111000000"; fingers['A']="1110000000"; fingers['B']="1100000000"; int t = 0; cin >> t; cin.ignore();//清空 while(t--){ char previous = ' '; //前壓 char current = ' ';//目前壓 int presses[10] = {};//手指頭 while(cin.get(current),current!='\n'){ for(int i=0;i<10;i++){ if(fingers[previous][i] == '0' && fingers[current][i] == '1'){ presses[i]++;} } previous = current; } for(int i=0;i<10;i++){ if(i)cout<<" "; cout<<presses[i]; } cout<<endl; } return 0; } ``` UVA 118 Mutant FlatWorld Exploers(類掃地機器人) --- ``` #include <iostream> #include <cstring> using namespace std; int maps[50][50]; int fxy[4][2]={{0,1},{1,0},{0,-1},{-1,0}}; int main(){ int n = 0; int m = 0; int x = 0; int y = 0; char start; string steps = ""; memset(maps, 0,sizeof(maps)); cin>>n>>m; while(cin >> x >> y >> start){ cin>>steps; int face_now = start == 'N'?0:start=='E'?1:start=='S'?2:3; int X = 0; int Y = 0; bool flag = false; for(int i=0;steps[i];i++){ if(steps[i]=='L'){ face_now = (face_now + 3) % 4; }else if(steps[i]=='R'){ face_now = (face_now +1 ) % 4; }else if(steps[i]=='F'){ X = x + fxy[face_now][0]; Y = y + fxy[face_now][1]; if(X < 0 || X > n || Y < 0 || Y > m){ if(maps[x][y]){ continue; } maps[x][y] = 1; flag = true; break; } x = X; y = Y; } } char face[5] = "NESW"; cout << x <<" "<< y <<" "<<face[face_now]; if(flag){ cout<<" LOST"; } cout<<endl; } return 0; } ``` UVA 948 Fibonaccimal Base(費氏數列) --- ``` #include <iostream> using namespace std; int main(){ int fibonacci[39]; int N = 0; int value = 0; fibonacci[0]=1; fibonacci[1]=2; for(int i=2;i<39;i++){ fibonacci[i] = fibonacci[i-1] + fibonacci[i-2]; } cin>> N; while(N--){ cin>>value; cout<< value <<" = "; bool flag = false; for(int i=38;i>=0;i--){ if(value >= fibonacci[i]){ cout<<"1"; value = value - fibonacci[i]; flag = true; }else if(flag){ cout<<"0"; } } cout<<" (fib)"<<endl; } return 0; } ``` UVA Divide ,But Not Quite Conquer!(一直被整除直到剩下1) --- ``` #include <iostream> using namespace std; string division(int n,int m,string solution){ if(n == 1){ return solution; } if(n % m == 0){ return division((n / m), m,solution+" "+ to_string(n / m)); }else{ return "Boring!"; } } int main(){ int n = 0; int m = 0; while(cin>>n>>m){ if(n < 2 || m < 2){ cout<<"Boring!\n"; continue; } cout<<division(n,m,to_string(n))<<endl; } return 0; } ``` UVA You can say 11(11的倍數,cin很大) --- ``` #include <iostream> using namespace std; int main(){ string line = ""; while(cin >> line){ if(line.length()==1 && stoi(line)==0)break; int even = 0; int odd = 0; bool flag = true; for(int i=0;i<line.length();i++){ if(flag){ odd = odd + (int)line[i] - 48; }else{ even = even +(int)line[i] - 48; } flag = !flag; } cout<<line<<" is" << ((odd-even)%11==0?" ":" not ") <<"a multiple of 11."<<endl; } return 0; } ``` UVA 10222 Decode the Mad man(鍵盤往左2位元) --- ``` #include <iostream> #include <string> using namespace std; int main(){ string keyboard = " `1234567890-=qwertyuiop[]asdfghjkl;'zxcvbnm,./"; string value = ""; while(getline(cin,value)){ for(int i=0;i<value.length();i++){ if(value[i]>='A' && value[i]<='Z'){ value[i] = value[i] + 32; } for(int j=0;j<keyboard.length();j++){ if(value[i]== keyboard[0]){ cout<<" "; break; }else if(value[i] == keyboard[j]){ cout<<keyboard[j-2]; break; } } } cout<<endl; } return 0; } ``` UVA 10409 Die Game(骰子翻面) --- ``` #include <iostream> using namespace std; int main(){ int n = 0; while(cin>>n && n){ int up=1; int N=2; int W=3; int E=4; int S=5; while(n--){ string s=""; cin>>s; if(s=="north"){ N = up; up = S; S = 7-N; }else if(s=="south"){ S = up; up = N; N = 7-S; }else if(s=="west"){ W = up; up = E; E = 7-W; }else if(s=="east"){ E = up; up = W; W = 7-E; } } cout<<up<<endl; } return 0; } ``` UVA 11150 Cola(喝cola最大化) --- ``` #include <iostream> using namespace std; int main(){ int N = 0; while(cin>>N){ int cola = N; while(N >= 3){ cola += N/3; N = N / 3 + N % 3 ; } if(N==2){ cola++; } cout<<cola<<endl; } return 0; } ``` UVA 10170 The Hotel with Infinite Rooms(計算某日入住人數) --- ``` #include <iostream> using namespace std; int main(){ long long S = 0; long long D = 0; while(cin >> S >> D){ while(D > 0){ D = D - S; S++; } cout<<S - 1<<endl; } return 0; } ```