本文主要是介绍poj-1013 Counterfeit Dollar,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
http://poj.org/problem?id=1013
题目要求找出轻的或重的硬币
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;
#define MAX 1000000
int ans[13];
char rright[12],lleft[12],re[5];
void findx(char str1[],char str2[],int l)
{for(int i=0; i<12; i++){bool flag=0;for(int j=0; j<l; j++){if((i+'A')==str1[j]){flag=1;break;}}for(int j=0; j<l; j++){if(i+'A'==str2[j]){flag=1;break;}}if(!flag)ans[i]=0;}
}
int main()
{int _;scanf("%d",&_);while(_--){int flag=0;memset(ans,-1,sizeof(ans));for(int i=0; i<3; i++){scanf("%s %s %s",lleft,rright,re);int l=strlen(lleft);int r=strlen(rright);if(re[0]=='e') //如果相等 则出现的硬币都赋值为0{for(int j=0; j<l; j++)ans[lleft[j]-'A']=0;for(int j=0; j<r; j++)ans[rright[j]-'A']=0;}else if(re[0]=='u') //如果是up 则左边出现的如果之前是1或者是0,则赋值为0,否则赋值为2 右边相反{for(int j=0; j<l; j++){if(ans[lleft[j]-'A']==0||ans[lleft[j]-'A']==1)ans[lleft[j]-'A']=0;elseans[lleft[j]-'A']=2;}for(int j=0; j<r; j++){if(ans[rright[j]-'A']==0||ans[rright[j]-'A']==2)ans[rright[j]-'A']=0;elseans[rright[j]-'A']=1;}findx(lleft,rright,l); //没有出现的赋值为0}else //为down 则相反{for(int j=0; j<l; j++){if((ans[lleft[j]-'A']==0)||(ans[lleft[j]-'A']==2))ans[lleft[j]-'A']=0;elseans[lleft[j]-'A']=1;}for(int j=0; j<r; j++){if(ans[rright[j]-'A']==0||ans[rright[j]-'A']==1)ans[rright[j]-'A']=0;elseans[rright[j]-'A']=2;}findx(lleft,rright,l);}}for(int i=0; i<=11; i++){if(ans[i]==2){printf("%c is the counterfeit coin and it is heavy.\n",i+'A');break;}if(ans[i]==1){printf("%c is the counterfeit coin and it is light.\n",i+'A');}}}
}
这篇关于poj-1013 Counterfeit Dollar的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!