*UVa 340 Master-Mind Hints(例題3-4)

爲什麼要加星號?因爲這道題的算法和書上大致上是差不多的,不一樣的地方是我把輸入數組換成讀入的時候統計而已

但是在oj上一直通不過,這我就很懵逼了,也不想把書上的代碼打一遍,反正基本上差不多,自己對照一下書上吧

至於爲什麼是取最小的一個?應該是“同時出現”,所以取比較小的數據相加得到數字的貢獻

PS:如果發現代碼有哪裏出現問題請在評論裏聯繫我,謝謝,因爲我自己也不知道哪裏的問題,oj上的測試數據也都可以過,我已經糾結了兩天

放代碼:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int n,a[11],b[11],c[11],cnt=0,tmp;
int main()
{
	while((scanf("%d",&n))==1&&n)
	{
		memset(a,0,sizeof(c));
		memset(b,0,sizeof(b));
		printf("Game %d:\n", ++cnt);
		for(int i = 0;i<n;i++) 
		{
  		   cin>>a[i];
           b[a[i]]++;
		}
		for(;;)
		{
			memset(c,0,sizeof(c));
			int sign = 1;
			int x=0,y=0,c1=0,c2=0;
			for(int i = 0;i<n;i++)
		    {
    			cin>>tmp;
    			if(tmp==0){sign = 0;}
    			for(int j = 0;j<n;j++)
    			if(a[j]==tmp&&i==j) x++;
    			c[tmp]++;
    		}
		    for(int i = 1;i<=9;i++)
    		y+=min(b[i],c[i]);
    		if(!sign) break;
    		printf("    (%d,%d)\n", x,y-x);
		}
	}
	return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章