Root :: Problem Set Volumes :: Volume III
340 - Master-Mind Hints
340 - Master-Mind Hints
先排序比较,然后再按原顺序比较。weak=总共相同的数 - strong.
水题一道。
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <string.h>
using namespace std;
#define N 1005
int secret[N],guess[N],s_t[N],g_t[N];
int main(){
#ifndef ONLINE_JUDGE
freopen("340in.txt","r",stdin);
#endif
int n,i,j,sum,ce=0,total,strong;
while (scanf("%d",&n)!=EOF&&n){
ce++;
for (i=0;i<n;i++){
scanf("%d",&secret[i]);
s_t[i]=secret[i];
}
sort(s_t,s_t+n);
printf("Game %d:\n",ce);
while (true){
sum=0;
for (i=0;i<n;i++){
scanf("%d",&guess[i]);
sum+=guess[i];
g_t[i]=guess[i];
}
if (!sum)
break;
sort(g_t,g_t+n);
total=0;
for (i=0,j=0;i<n&&j<n;){
if (s_t[i]==g_t[j]){
i++;
j++;
total++;
}
else if (s_t[i]<g_t[j])
i++;
else j++;
}
strong=0;
for (i=0,j=0;i<n&&j<n;i++,j++){
if (secret[i]==guess[j])
strong++;
}
printf(" (%d,%d)\n",strong,total-strong);
}
}
return 0;
}
本文介绍了一种解决Master Mind游戏的算法实现。通过先排序再逐位比较的方法,计算出每轮猜测中正确位置(Strong)及正确数字但位置错误(Weak)的数量。此算法适用于编程竞赛等场景。

被折叠的 条评论
为什么被折叠?



