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;
}