Poj 1013
大致思路就是将12个硬币标记为0,分别判断每一行,若左边重则给左边相应硬币+1,右边-1,even时标记为100,表示已确认为真币
最后判断哪个硬币的绝对值最大则嫌疑最大,标记为负值表示较轻,正值表示较重
算是一个水题吧……我竟然还错了几次……
1 #include<iostream> 2 #include<string> 3 #include<cmath> 4 #include<cstring> 5 using namespace std; 6 7 int coin[12]={0}; 8 9 int main(){ 10 int n; 11 int l,r; 12 string s; 13 int maxx; 14 int number; 15 cin>>n; 16 while(n--){ 17 memset(coin,0,sizeof(coin)); 18 int Left[6]={1}; 19 int Right[6]={1}; 20 for(int j=0;j<3;j++){ 21 cin>>s; 22 l=s.size(); 23 for(int i=0;i<l;i++){ 24 Left[i]=s[i]-65; 25 } 26 cin>>s; 27 r=s.size(); 28 for(int i=0;i<r;i++){ 29 Right[i]=s[i]-65; 30 } 31 cin>>s; 32 if("even"==s){ 33 for(int i=0;i<l;i++){ 34 coin[Left[i]]=100; 35 } 36 for(int i=0;i<r;i++){ 37 coin[Right[i]]=100; 38 } 39 } 40 if("up"==s){ 41 for(int i=0;i<l;i++){ 42 if(coin[Left[i]]!=100){ 43 coin[Left[i]]++; 44 } 45 } 46 for(int i=0;i<r;i++){ 47 if(coin[Right[i]]!=100){ 48 coin[Right[i]]--; 49 } 50 } 51 } 52 if("down"==s){ 53 for(int i=0;i<l;i++){ 54 if(coin[Left[i]]!=100){ 55 coin[Left[i]]--; 56 } 57 } 58 for(int i=0;i<r;i++){ 59 if(coin[Right[i]]!=100){ 60 coin[Right[i]]++; 61 } 62 } 63 } 64 } 65 maxx=0; 66 for(int i=0;i<12;i++){ 67 if(coin[i]!=100){ 68 if(maxx<fabs(coin[i])){ 69 maxx=fabs(coin[i]); 70 number=i; 71 } 72 } 73 } 74 if(coin[number]>0){ 75 cout<<char(65+number)<<" is the counterfeit coin and it is heavy."<<endl; 76 } 77 else{ 78 cout<<char(65+number)<<" is the counterfeit coin and it is light."<<endl; 79 } 80 } 81 }