# 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;
}
```