Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

用的排除法,假设其中一个为假,带入验证

Posted by sohow at 2013-11-16 17:27:06 on Problem 1013
#include	<stdio.h>
#include	<string.h>

typedef struct Node {
	int s1[12];
	int s2[12];
	int flag;
}Node;

void solve()
{
	int i, j, k, w, num;
	int arry[20];
	char str1[13], str2[13], temp[13];
	char str[2][10] = {"light","heavy"};
	Node dest[3];
	arry[12] = 1;
	scanf("%d",&num);
	getchar();
	for (i = 0; i < num; i++) {
		memset(arry,0,sizeof(arry));
		memset(dest,0,sizeof(dest));
		for (j = 0; j < 3; j++) {
			scanf("%s %s %s",str1,str2,temp);
			for (k = 0; str1[k] != '\0'; k++) {
				dest[j].s1[str1[k]-'A'] = 1;
				dest[j].s2[str2[k]-'A'] = 1;
				arry[str1[k]-'A'] = 1;
				arry[str2[k]-'A'] = 1;
			}
			if (strcmp(temp,"even") == 0)
				dest[j].flag = 1;
			else if (strcmp(temp,"up") == 0)
				dest[j].flag = 2;
			else
				dest[j].flag = 3;
		}
		w = 0;
		while (w < 2) {
			for (j = -1; j < 11; ) {
				while (arry[++j] == 0);
				if (j >= 12)
					break;
				for (k = 0; k < 3; k++) {
					if (dest[k].s1[j] == 0 && dest[k].s2[j] == 0 && dest[k].flag != 1)
						break;
					if (dest[k].s1[j] == 1 && dest[k].flag != 3 - w)
						break;
					if (dest[k].s2[j] == 1 && dest[k].flag != 2 + w)
						break;
				}
				if (k >= 3) {
					printf("%c is the counterfeit coin and it is %s. \n",j+'A',str[w]);
					w++;
					break;
				}
			}
			w++;
		}

	}

}

int main(void)
{
	solve();
	return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator