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

Re:出人命了!测试数据都对了可wrong了N次:大侠几个让我wrong的数据或建议吧,不胜感激:

Posted by gordon007 at 2009-06-21 18:51:10 on Problem 1013
In Reply To:出人命了!测试数据都对了可wrong了N次:大侠几个让我wrong的数据或建议吧,不胜感激: Posted by:lzj_kkx at 2009-05-04 16:32:15
> //优化
> #include <stdio.h>
> #include <string.h>
> #define OK 1
> #define ERROR 0
> #define HALF_STRING 4
> #define LEFT -1
> #define RIGHT 1
> #define FALSE 0
> 
> typedef int status;
> typedef struct 
> {
> 	char left[13];
> 	char right[13];
> } line;
> 
> status initLineArray(line string[3],int *countEven);
> status solution(line string[3],int countEven);
> 
> int  locate(line *string,char counterfeit);
> void printfResult(char weight[],int state,char counterfeit);
> main()
> {
> 	int n,countEven;
> 	line string[3];
> 	fp = fopen("data.txt","r");
> 	scanf("%d",&n);
> 	while(n--)
> 	{
> 		countEven = 0;
> 		initLineArray(string,&countEven);
> 		solution(string,countEven);
> 	}
> }
> status initLineArray(line string[3],int *countEven)
> {
> 
> 	char left[5],right[5],weigh[5];
> 	int first = 0 ,last = 2,i;
> 	for( i = 0;i < 3 ;i++)
> 	{
> 		scanf("%s %s %s",left,right,weigh);
> 		if(!strcmp(weigh,"even"))
> 		{
> 			(*countEven)++;
> 			strcpy(string[last].left,left);
> 			strcpy(string[last].right,right);
> 			last--;
> 		}
> 		else if(!strcmp(weigh,"down"))
> 		{
> 			strcpy(string[first].left,right);
> 			strcpy(string[first].right,left);
> 			first++;
> 		}
> 		else
> 		{
> 			strcpy(string[first].left,left);
> 			strcpy(string[first].right ,right);			
> 			first++;
> 		}
> 	}
> 	return OK;
> }
> status solution(line string[3],int countEven)
> {
> 	int i,j,state[3];
> 	char counterfeit;
> 	char weight [6];
> 
> 	for(i = 'A';i <= 'L';i++)
> 	{
> 		counterfeit = i;
> 
> 		for(j = 0;j < 3;j++)
> 			state[j] = locate(&string[j],counterfeit);
> 		switch (countEven)	
> 		{
> 		case 0:
> 			if(state[0] == state[1] && state[2] == state[1] && state[0])
> 				i = 'L';
> 			break;
> 		case 1:
> 			if(state[0] == state[1] && state[0] && !state[2]) 
> 				i = 'L';
> 			break;
> 		case 2:
> 			if(state[0] && !state[1] && !state[2])
> 				i = 'L';
> 			break;
> 		default:
> 			break;
> 		}
> 		
> 	}
> 	printfResult(weight,state[0],counterfeit);
> 	return OK;
> }
> int locate(line *string,char counterfeit)
> {
> 	int i;
> 
> 	for(i = 0;i < sizeof(string->left);i++)
> 	{
> 		if(*(string->left + i) == counterfeit)
> 			return LEFT;
> 	}
> 
> 	for(i = 0;i < sizeof(string->right);i++)
> 	{
> 		if(*(string->right + i) == counterfeit)
> 			return RIGHT;
> 	}
> 
> 	return FALSE;
> }
> void printfResult(char weight[],int state,char counterfeit)
> {
> 	if(state == -1)
> 	{
> 		strcpy(weight,"heavy");
> 	}
> 	else if(state == 1)
> 	{
> 		strcpy(weight,"light");
> 	}
> 	printf("%c is the counterfeit coin and it is %s.\n",counterfeit,weight);
> }

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