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