題意:有A-L個(gè)標(biāo)號的硬幣,其中有一個(gè)是假幣,你不知道假幣的輕重,現(xiàn)在給你三個(gè)字符串,up代表右面輕,down右面重,even代表兩面相等,找出假幣并且判斷輕重
思路:因?yàn)橹挥蠥-L個(gè)硬幣所以枚舉一下,假設(shè)A是假幣,然后判斷一下是否滿足那三個(gè)條件,滿足條件的保存
怎么是滿足條件,除了不滿足條件的,剩下的都滿足條件。
不滿足條件的
1.兩面相等的字符串出現(xiàn)假幣,說明假設(shè)不成立。
2.右面輕的字符串出現(xiàn)假幣在左面輕或者在右面重,說明假設(shè)也不成立。
3.右面重的字符串出現(xiàn)假幣在左面中或者在右面輕,說明假設(shè)也不成立。
不滿足上面條件就是假幣。
?
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char L[3][10];
char R[3][10];
char heav[3][10];
struct coin
{
char c;
int flag;
};
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int i,j;
for(i = 0; i < 3; i++)
{
scanf("%s%s%s",L[i],R[i],heav[i]);
}
coin a;a.c = 'A',a.flag = -1;
int f;
for(i = 0; i < 12; i++)
{
int flag_L = 0,flag_R = 0;f = -1;
for(j = 0; j < 3; j++)
{
flag_L = 0,flag_R = 0;
int len;
int len_L = strlen(L[j]),len_R = strlen(R[j]);
for(len = 0; len < len_L; len++)
{
if((i+'A') == L[j][len])
flag_L = 1;
}
for(len = 0; len < len_R; len++)
{
if((i+'A') == R[j][len])
flag_R = 1;
}
if(strcmp(heav[j],"even") == 0 )
{
if(flag_L || flag_R)
{
break;
}
}
else if(strcmp(heav[j],"up") == 0)
{//printf("%c\n",i+'A');
if(flag_R && f == 0)
break;
if(flag_L && f == 1)
break;
if(!flag_R && !flag_L)
break;
if(flag_R)
{
f = 1;
}
else if(flag_L)
{
f = 0;
}
}
else if(strcmp(heav[j],"down") == 0)
{
if(flag_L && f == 0)
break;
if(flag_R && f == 1)
break;
if(!flag_R && !flag_L)
break;
if(flag_L)
{
f = 1;
}
if(flag_R)
{
f = 0;
}
}
}
if(j == 3)
{
a.c = i+'A';
a.flag = f;
}
}
if(a.flag == 0)
printf("%c is the counterfeit coin and it is heavy.\n",a.c);
else
printf("%c is the counterfeit coin and it is light.\n",a.c);
}
return 0;
}
?
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

