> [TOC] > > [time=Sun, Dec 3, 2023 8:42 PM] > # a080: uva.458 The Decoder***** > http://140.113.72.36:207/ShowProblem?problemid=a080 > **先計算輸入與輸出的ASCll值的差距k, > 然後把輸入加上k後 再從int(ASCll)值轉換成char(字符)** ```cpp= //a080: uva.458 The Decoder #include <iostream> #include <string> using namespace std; int main() { string s; int k='*'-'1'; //int ASCLL 差值 *** while(cin>>s)//讀取整個字串直到空格 { for(int i=0;i<s.length();i++)//轉換整個字串 { cout<<(char)(s[i]+k);//char + ASCLL => ASCLL 結果要整個轉成 char ***** } cout<<endl;//輸出全部後換行***** } return 0; } ``` # a085: uva.10924 Prime Words****** > http://140.113.72.36:207/ShowProblem?problemid=a085 > **先把輸入加上 1-'a' or 27-'A'** 來計算ASCll數值並加總成<**sum(預設是0)**>, **判斷sum 是否為prime 預設是Ture, 如果找到sum的因數變False** ```cpp= //a085: uva.10924 Prime Words #include <iostream> #include <string> #include <cmath> using namespace std; int isprime(int x)//判斷sum是否為prime ***** { bool prime=true;//預設是prime for(int i=2;i<=sqrt(x);i++) { if(x%i==0)//有因數可整除不是prime { prime = false; return prime; } } return prime; } int main() { string s; int sum; while(cin>>s)//讀取整個字串直到空格 { sum=0;//重置 ***** for(int i=0;i<s.length();i++) { if(s[i]>='a'&&s[i]<='z') { sum+=s[i]+(1-'a');//char + ASCLL - char => ASCll ***** } else if(s[i]>='A'&&s[i]<='Z') { sum+=s[i]+(27-'A'); } } if(isprime(sum))//prime == true***** { cout<<"It is a prime word."<<endl; } else { cout<<"It is not a prime word."<<endl; } } return 0; } ``` # a087: uva.11192 Group Reverse****** > http://140.113.72.36:207/ShowProblem?problemid=a087 > 輸入不要用getline, 分成g組, 每組有**字串G的長度/g**個字, **先找每組的第一個(i=0;i<g.length();i+=groupmemeber), 再從這組的最後輸出到第一個(j=i+groupmember-1;j>=i;j-- )** ```cpp= //a087: uva.11192 Group Reverse #include <iostream> #include <string> using namespace std; int main() { int g; string G; while(cin>>g) { if(g==0) { break; } cin>>G;//不能用getline 因為g後面有空格*** int groupmember=G.length()/g;//每組人數=總數/組數 ***** for(int i=0;i<G.length();i+=groupmember)//找每組第一個*** { for(int j=i+groupmember-1;j>=i;j--)//從每組的最後一個開始輸出 ***** { cout<<G[j];//輸出字串 } } cout<<endl;//輸出全部後換行***** } } return 0; } ``` # a084: uva.10903 Rock-Paper-Scissors Tournament****** > http://140.113.72.36:207/ShowProblem?problemid=a084 > 討論情況,每場比賽 total[p1]++ ; total[p2]++;**(預設都是0)** p1贏, win[p1]++ ; p2贏, win[p2]++; **(預設都是0)** 輸出p1~pn的勝率<win/total> **計算之前用(float) 不要算完才處理** **第二次輸出開始前都要空一行** ```cpp= //a084: uva.10903 Rock-Paper-Scissors Tournament #include <iostream> #include <string> #include <iomanip> using namespace std; int main() { int n,k; int p1,p2; string m1; string m2; bool space=false;//第一筆之前不空行*** while(cin>>n) { if(n==0) { break; } cin>>k; int win[101]={0};//重置 ***** int total[101]={0};//重置 ***** for(int i=0;i<k*n*(n-1)/2;i++) { cin>>p1>>m1>>p2>>m2; if((m1=="paper"&&m2=="rock")||(m1=="rock"&&m2=="scissors")||(m1=="scissors"&&m2=="paper")) { win[p1]++; total[p1]++; total[p2]++; } else if((m2=="paper"&&m1=="rock")||(m2=="rock"&&m1=="scissors")||(m2=="scissors"&&m1=="paper")) { win[p2]++; total[p1]++; total[p2]++; } } if(space==true)//第二筆之後都先空行*** { cout<<endl; } space=true; for(int j=1;j<=n;j++)//輸出player 1~n { if(total[j]==0) { cout<<"-"<<endl; } else { cout<<fixed<<setprecision(3)<<(float)win[j]/total[j]<<endl;//先float再除 ***** } } } return 0; } ``` # a095: uva11369. Shopaholic**** > http://140.113.72.36:207/ShowProblem?problemid=a095 > 把輸入用**sort(price,price+n,cmp)由大到小排序,cmp是a>b函數** 把第2,5...個價格加總到<**sum(預設是0)**>後輸出 ```cpp= //a095: uva11369. Shopaholic #include <iostream> #include <algorithm> using namespace std; int cmp(int a,int b) { return a>b;//由大到小排序 *** } int main() { int t,n,sum; int price[20000]; cin>>t; while(cin>>n) { for(int i=0;i<n;i++) { cin>>price[i]; } sort(price,price+n,cmp); sum=0;//重置 *** for(int j=2;j<n;j+=3) { sum+=price[j]; } cout<<sum<<endl; } return 0; } ```