UVA340 Master-Mind Hints【陣列】
阿新 • • 發佈:2018-11-11
Master-Mind Hints
題目大意:先輸入一個整數n,表示有n個數字,下面第一行代表正確答案,其下每一行代表使用者猜的答案,需統計其有多少數字位置正確(A),有多少數字在兩個字串中都出現過但位置不正確(B),輸入一全為0結束。
AC程式碼:
#include <cstdio> #include <iostream> #include <algorithm> #include <cmath> #include <cstdlib> #include <cstring> #include <map> #include <stack> #include <queue> #include <vector> #include <bitset> #include <set> #include <utility> using namespace std; typedef long long ll; #define inf 0x3f3f3f3f #define rep(i,l,r) for(int i=l;i<=r;i++) #define lep(i,l,r) for(int i=l;i>=r;i--) #define ms(arr) memset(arr,0,sizeof(arr)) //priority_queue<int,vector<int> ,greater<int> >q; const int maxn = (int)1e5 + 5; const ll mod = 1e9+7; int arr[maxn]; int num[15]; int num1[15]; int arr1[maxn]; int main() { freopen("in.txt", "r", stdin); freopen("out.txt", "w", stdout); int n; int cnt=0; while(scanf("%d",&n)!=EOF&&n) { cnt++; ms(arr);ms(vis);ms(num); printf("Game %d:\n",cnt); rep(i,1,n) { scanf("%d",&arr[i]); num[arr[i]]++; //記錄每個數字出現了多少次 } while(1) { memcpy(num1,num,sizeof(num)); //將其複製到num1中以便使用 int A=0,B=0; int sum=0; rep(i,1,n) { scanf("%d",&arr1[i]); sum+=arr1[i]; //判斷全為0時結束 if(arr1[i]==arr[i]) { A++; //位置正確則A++ num1[arr1[i]]--; //有一個位置正確就證明不正確的少了一個 } } rep(i,1,n) { if(arr1[i]!=arr[i]&&num1[arr1[i]]>0) //位置不正確且又在原陣列中出現過 { B++; num1[arr1[i]]--; } } if(sum==0) break; printf(" (%d,%d)\n",A,B); } } return 0; }