UVA 340 - Master-Mind Hints
2014-07-22 15:19
531 查看
这题题目看的我真是内牛满面啊,题目超级长,而且大多数说的都是没用的,后来百度了一下,一位大神一句话就搞定了,http://blog.163.com/kakarrot@yeah/blog/static/12011592520106241155854/,其实就是统计两个序列相同列相同数字的个数和不同列相同数字的个数。要注意,两列中任意一个元素如果已经用过就不能再用了。不过一开始由于思路没有理清,出了各种逻辑错误,因为只对着一组样例来写,所以思路不清晰,下面是我的代码,想清楚还是挺简单的,已经AC。
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<algorithm> #include<iostream> using namespace std; int a,b; void op(int n,int *x,int *y) { a=0;b=0; int tmp[1010]; for(int i=0;i<n;i++){ if(x[i]==y[i]) a++; tmp[i]=x[i]; } int c=0; //先把同列相同的元素置成0,否则之后排序就无法求b了 for(int i=0;i<n;i++){ if(tmp[i]==y[i]){ tmp[i]=y[i]=0; c++; } } sort(tmp,tmp+n); sort(y,y+n); for(int i=c;i<n;i++) for(int j=c;j<n;j++){ if(y[i]<tmp[j]) break; else{ if(y[i]==tmp[j]){ b++; tmp[j]=0;//比较过后相同就置成0 break; } } } printf(" (%d,%d)\n",a,b); } int main() { int code[1010],guess[1010]; int n; int count=0; while(scanf("%d",&n),n){ memset(code,0,sizeof(code)); memset(guess,0,sizeof(guess)); count++; for(int i=0;i<n;i++) scanf("%d",&code[i]); printf("Game %d:\n",count); while(1){ for(int i=0;i<n;i++) scanf("%d",&guess[i]); if(guess[0]==0) break; op(n,code,guess); } } return 0; }
相关文章推荐
- UVA-340 Master-Mind Hints
- uva 340 Master-Mind Hints(检索)
- UVA 340-Master-Mind Hints(STL-map)
- UVa 340 - Master-Mind Hints
- 章三例题4——UVA 340 Master -Mind Hints
- uva 340 Master-Mind Hints
- UVa 340 Master-Mind Hints
- UVA - 340 Master-Mind Hints
- 猜数字游戏的提示(Master-Mind Hints, UVa 340)
- UVa 340 - Master-Mind Hints
- Problem 004——UVa 340 - Master-Mind Hints
- uva340 - Master-Mind Hints
- UVA 340 - Master-Mind Hints 简单题 题面难看
- UVA 340 Master-Mind Hints 猜密码游戏(水)
- UVa 340 Master-Mind Hints
- UVa 340 - Master-Mind Hints
- 章三例题4——UVA 340 Master -Mind Hints
- UVA 340 Master-Mind Hints
- UVA 340 - Master-Mind Hints
- UVA - 340 Master-Mind Hints