위조 화폐 문제 (사고 문제)

vjudge 제출 링크

주제 : 위조 통화 문제

——Saley는 12 개의 은화를 가지고 있습니다. 그중에는 실제 동전 11 개와 위조 동전 1 개가 있습니다. 위조 통화는 실제 통화와 동일하게 보이지만 무게는 다릅니다. 그러나 사이 리는 위조 통화가 실물 통화보다 가볍거나 무거운 지 알지 못합니다. 그래서 그는 친구에게서 잔액을 빌 렸습니다. 제 친구는 사이 리가 위조 통화를 세 번 찾아 내고 위조 통화가 심각한 지 아닌지 판단 할 수 있기를 바랍니다. 예를 들어, 게임에서 두 동전의 무게를 측정하기 위해 잔액을 사용하고 균형이 균형을 이루고 있음을 발견하면 두 동전이 모두 실제임을 의미합니다. 게임이 실제 동전을 다른 은화와 비교하여 실제 동전보다 가볍거나 무겁다는 것을 발견하면 위조 동전임을 의미합니다. 각 계량을 꼼꼼하게 정리 한 후 Sai Li는 3 회 계량 후 위조 통화를 확인합니다.

Input
의 첫 번째 줄에 n이 있습니다. 즉, n 개의 테스트 케이스 그룹이 있음을 의미합니다.
각 테스트 케이스 세트에 대해
세 줄의 입력이 있으며 각 줄은 계량 결과를 나타냅니다. Sai Li는 사전에 은화를 AL로 표시했습니다. 각 계량의 결과는 공백으로 구분 된 세 개의 문자열로 표시됩니다. 저울의 왼쪽에 배치 된 동전의 균형 상태와 저울의 오른쪽에 배치 된 동전. 균형 상태는 up'',오른쪽 끝이 높고 오른쪽 끝이 낮고 균형이 각각 " 아래"또는 "짝수"로 표시됩니다. 잔액의 왼쪽과 오른쪽에있는 동전의 수는 항상 동일합니다.


은화로 표시된 출력 은 위조 동전이며 실제 동전보다 가볍거나 가벼운 지 (무거움 또는 가벼움).

샘플 입력
1
ABCD EFGH 짝수
ABCI EFJK 위로
ABIJ EFGH 짝수

샘플 출력
K는 위조 동전이며 가볍습니다.

문제 해결 아이디어

이 질문의 질문 유형과 일치하는이 질문의 솔루션 아이디어를 참조하십시오 : 클릭

암호:

#include<stdio.h>
#include<string.h>
int real[330];
int suspect[330];
char a[30],b[30],c[30];
int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		int i,j,l;
		int count=0;
		memset(real,0,sizeof(real));
		memset(suspect,0,sizeof(suspect));
		for(i=0;i<3;i++)
		{
			scanf("%s %s %s",a,b,c);
			l=strlen(a);
			if(c[0]=='e')
			{
				for(j=0;j<l;j++)
					real[a[j]]=1;
				for(j=0;j<l;j++)
					real[b[j]]=1;
			}
			if(c[0]=='u')//左重右轻 
			{
				count++;
				for(j=0;j<l;j++)
					suspect[a[j]]++;
				for(j=0;j<l;j++)
					suspect[b[j]]--; 
			}
			if(c[0]=='d')//左轻右重
			{
				count++;
				for(j=0;j<l;j++)
					suspect[a[j]]--;
				for(j=0;j<l;j++)
					suspect[b[j]]++; 
			}
		}
		for(i='A';i<='L';i++)
		{
			if(real[i]==1)
				continue;
			if(suspect[i]==count)
				printf("%c is the counterfeit coin and it is heavy. \n",i);
			if(suspect[i]==-count)
				printf("%c is the counterfeit coin and it is light. \n",i);
		}
	}
	return 0;
}

추천

출처blog.csdn.net/Helinshan/article/details/114728598