ZCMU-1053

image
image
image

比较简单记录一下主要感觉它这个题目没说清楚,题目要求:先有n,接着给出长度为n的标准组,然后给出猜测组,输出的两个数一个是有多少个是相对应的既相同坐标其数值也相同,后一个是两个都有但是位置不同(不含已经相同的)我觉得它少了一类个例子:

类似于
1 2 3 4 3 6
1 3 3 3 4 3


思路:用三个数组一个放对照,一个放猜测,还有一个放相关情况,相关情况在对对照与猜测不同时记录

#include<stdio.h>
int s[10005],f[10005];
struct flag{//用结构定义,对照组和猜测组相联系 
	int sf;
	int gf;
}cnt[10]={0,0,0};
//因为只有1到9的数字 
int min(int a,int b) {
	if(a<b)
	 return a;
	else 
	 return b;
}
int main(){
	int i,N,cnt1,cnt2,n=0;
	while(scanf("%d",&N)&&N!=0){
		n++;
		for(i=0;i<N;i++){
			scanf("%d",s+i);
		}
		printf("Game %d:\n",n);
		while(1){
			cnt1=0,cnt2=0;
			//cnt1表示有多少个相同
			//cnt2表示有多少不同 
			for(i=0;i<N;i++){
			scanf("%d",f+i);
			if(s[i]==f[i])cnt1++; 
			//相同不表示 
			else {
				   cnt[f[i]].gf++;
				   cnt[s[i]].sf++;
				   //不相同则表示出来 
		        }
	  	   }
		if(f[i-1]==0){
			//跳处循环且处理好数据 
			for(i=0;i<10;i++){
				cnt[i].gf=0,cnt[i].sf=0;
			}
			break;
		}
		for(i=0;i<10;i++){
			if(cnt[i].gf>=0&&cnt[i].sf>=1){
				//存在不对等情况 
				if(cnt[i].gf==cnt[i].sf){
					cnt2 += cnt[i].gf;
					//如果刚好不对等情况相同 
				    }
				else  cnt2 += min(cnt[i].gf,cnt[i].sf);
				    //如果一个多则多出的不要 
			    }
			    cnt[i].gf=0,cnt[i].sf=0;
	     	}
		printf("    (%d,%d)\n",cnt1,cnt2);
		}
	}
	return 0;
}
posted @ 2024-04-12 15:37  海&贼  阅读(3)  评论(0编辑  收藏  举报