首页 > 代码库 > nefu 640 Number Guessing
nefu 640 Number Guessing
题目:大意就是猜数,给定个四位数,然后给出这个数与正确的数之间的比较(#A*B,#代表有#个数字他的值和位置都对了,*代表有*个数的值对了),给出n个上述的4位数,让你确定这个正确的数是多少。
思路:直接暴力。
注意:程序结束是n为负数,而不是-1,为此超时了两次 T T。
代码:
#include <iostream> #include <cstdio> #include <cstring> using namespace std; struct node { char s[5]; int a,b; }t[5600]; int n; bool solve(char a,char b,char c,char d) { int l=0,r=0; for(int i=0;i<n;i++) { l=0,r=0; if(t[i].s[0]==a) l++,r++; else if(t[i].s[0]==b||t[i].s[0]==c||t[i].s[0]==d) r++; if(t[i].a<l||t[i].b<r) return false; if(t[i].s[1]==b) l++,r++; else if(t[i].s[1]==a||t[i].s[1]==c||t[i].s[1]==d) r++; if(t[i].a<l||t[i].b<r) return false; if(t[i].s[2]==c) l++,r++; else if(t[i].s[2]==b||t[i].s[2]==a||t[i].s[2]==d) r++; if(t[i].a<l||t[i].b<r) return false; if(t[i].s[3]==d) l++,r++; else if(t[i].s[3]==b||t[i].s[3]==c||t[i].s[3]==a) r++; if(t[i].a!=l||t[i].b!=r) return false; } return true; } int main() { int i,j,k,l; while(scanf("%d",&n)) { if(n<0) break; for(i=0;i<n;i++) { scanf("%s %dA%dB",t[i].s,&t[i].a,&t[i].b); } for(i=‘0‘;i<=‘9‘;i++) for(j=‘0‘;j<=‘9‘;j++) { if(i==j) continue; for(k=‘0‘;k<=‘9‘;k++) { if(k==i||k==j) continue; for(l=‘0‘;l<=‘9‘;l++) { if(l==k||l==j||l==i) continue; if(solve(i,j,k,l)) { printf("%c%c%c%c\n",i,j,k,l); goto En; } } } } En:continue; } return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。