POJ 1013 Counterfeit Dollar

http://poj.org/problem?id=1013

题解:有12个硬币 编号 A--L

其中11个真币,1个假币

每次数据 有三次判断 

当 even时候 两边一样重

当up时候,左边重,右边轻

当down时,左边轻,右边重

思路:

初始化为0,当even时赋值为1000,必为真币,不是even的重的加1,轻的减1,

最后循环一次,不是1000的中得绝对值最大的那个是假币

正的重,负的轻

 

代码容易明白

 1 #include<stdio.h>

 2 #include<string.h>

 3 #include<stdlib.h>

 4 #include<math.h>

 5 int main()

 6 {

 7     int n,i,j,max,h,num;

 8     int a[12],t;

 9     char str1[20],str2[20],str3[20],str[10];

10     scanf("%d",&n);

11     for(t=1;t<=n;t++)

12     {

13         memset(str,0,sizeof(str));

14         memset(str1,0,sizeof(str1));

15         memset(str2,0,sizeof(str2));

16         memset(str3,0,sizeof(str3));

17         for(i=0;i<12;i++)

18         {

19             a[i]=0;

20         }

21         for(h=1;h<=3;h++)

22         {

23             scanf("%s %s %s",str1,str2,str3);

24         if(strcmp(str3,"even")==0)

25         {

26            for(j=0;j<strlen(str1);j++)

27            a[str1[j]-'A']=1000;

28            for(j=0;j<strlen(str2);j++)

29            a[str2[j]-'A']=1000;

30         }

31         else if(strcmp(str3,"up")==0)

32         {

33             for(j=0;j<strlen(str1);j++)

34                 if(a[str1[j]-'A']!=1000)

35                 a[str1[j]-'A']++;

36             for(j=0;j<strlen(str2);j++)

37                 if(a[str2[j]-'A']!=1000)

38                 a[str2[j]-'A']--;

39 

40         }

41         else if(strcmp(str3,"down")==0)

42         {

43             for(j=0;j<strlen(str1);j++)

44                 if(a[str1[j]-'A']!=1000)

45                 a[str1[j]-'A']--;

46             for(j=0;j<strlen(str2);j++)

47                 if(a[str2[j]-'A']!=1000)

48                 a[str2[j]-'A']++;

49         }

50         }

51         max=0;

52         num=0;

53         for(i=0;i<12;i++)

54         {

55             if(abs(a[i])>abs(max)&&a[i]!=1000)

56             {max=a[i];

57             num=i;}

58         }

59         printf("%c",num+'A');

60         if(a[num]>0)

61         strcpy(str,"heavy");

62         else if(a[num]<0)

63         strcpy(str,"light");

64         printf(" is the counterfeit coin and it is %s. \n",str);

65         }

66 

67 }
View Code

 

你可能感兴趣的:(count)