poj1013

可以参考http://www.slyar.com/blog/poj-1013-c.html上的测试用例

 

#include<stdio.h>
#include<string.h>

#define ABS(x) (x)>0?(x):(-x)

int main()
{
	int i, j, k, n;
	char left[3][7],right[3][7];//分别存储左右两边
	int result[3] = {0};//分别存储三组输入的结果,为0表示even,为1表示右边up,为2表示右边down
	char reflect[12] = {'A','B','C','D','E','F','G','H','I','J','K','L'};
	int identify[12];//存储对12枚硬币(A,B,C...)的判断结果,大于1表示为假且重,等于0或1表示真,小于0表示为假且轻
	char s[5];
	int min,max,min_index,max_index;
	
	
	scanf("%d", &n);
		
	for(i=0; i<n; i++)
	{
		memset(identify, 0, sizeof(int)*12);
		min = 6;
		max = -6;
		for(j=0; j<3; j++)
		{
			scanf("%s %s %s", left[j], right[j], s);

			if(strncmp(s, "even", 4)==0)//如果是even,说明左右两边的硬币都是真的
			{
				k = 0;
				while(left[j][k]!='\0')//两边相等则说明两边所放的硬币都是真的,将其标记为1,以后不再修改
				{
					identify[left[j][k]-'A'] = 1;
					identify[right[j][k]-'A'] = 1;
					k++;
				}
			}
			else if(strncmp(s, "up", 2)==0)//右边轻
			{
				k = 0;
				while(left[j][k]!='\0')//左右两边硬币个数是相同的,只用判断一边
				{
					if(identify[left[j][k]-'A'] != 1)
					{
						identify[left[j][k]-'A'] = identify[left[j][k]-'A']+2;
					}
					if(identify[right[j][k]-'A'] != 1)
					{
						identify[right[j][k]-'A'] = identify[right[j][k]-'A']-2;
					}
					k++;
				}
			}
			else if(strncmp(s, "down", 4)==0)//右边重
			{
				k = 0;
				while(left[j][k]!='\0')
				{
					if(identify[left[j][k]-'A'] != 1)
					{
						identify[left[j][k]-'A'] = identify[left[j][k]-'A']-2;
					}
					if(identify[right[j][k]-'A'] != 1)
					{
						identify[right[j][k]-'A'] = identify[right[j][k]-'A']+2;
					}
					k++;
				}
			}
		}
		for(k=0; k<12; k++)
		{
			if(identify[k]>1 && identify[k]>max)
			{
				max = identify[k];
				max_index = k;
			}
			if(identify[k]<0 && identify[k]<min)
			{
				min = identify[k];
				min_index = k;
			}
		}
		if(ABS(min)<max)
			printf("%c is the counterfeit coin and it is heavy.\n", reflect[max_index]);
		else
			printf("%c is the counterfeit coin and it is light.\n", reflect[min_index]);
	}
	return 0;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值