博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu1172猜数字
阅读量:5242 次
发布时间:2019-06-14

本文共 2768 字,大约阅读时间需要 9 分钟。

题目链接:

猜数字

Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 2540    Accepted Submission(s): 1475
Problem Description
猜数字游戏是gameboy最喜欢的游戏之中的一个。游戏的规则是这种:计算机随机产生一个四位数,然后玩家猜这个四位数是什么。每猜一个数,计算机都会告诉玩家猜对几个数字,当中有几个数字在正确的位置上。
比方计算机随机产生的数字为1122。假设玩家猜1234,由于1,2这两个数字同一时候存在于这两个数中,并且1在这两个数中的位置是同样的,所以计算机会告诉玩家猜对了2个数字,当中一个在正确的位置。假设玩家猜1111,那么计算机会告诉他猜对2个数字,有2个在正确的位置。
如今给你一段gameboy与计算机的对话过程,你的任务是依据这段对话确定这个四位数是什么。
 
Input
输入数据有多组。每组的第一行为一个正整数N(1<=N<=100),表示在这段对话中共同拥有N次问答。在接下来的N行中,每行三个整数A,B,C。gameboy猜这个四位数为A,然后计算机回答猜对了B个数字,当中C个在正确的位置上。当N=0时,输入数据结束。
 
Output
每组输入数据相应一行输出。假设依据这段对话能确定这个四位数,则输出这个四位数,若不能,则输出"Not sure"。
 
Sample Input
 
6 4815 2 1 5716 1 0 7842 1 0 4901 0 0 8585 3 3 8555 3 2 2 4815 0 0 2999 3 3 0
 
Sample Output
 
3585 Not sure
 
Author
lwg
 
Recommend
We have carefully selected several similar problems for you:          
 
这个题目的思路是:

从1000到9999进行暴力枚举。。。

须要满足两个条件:

1:题目所给的条件和眼下枚举的值要有同样的位数的值要相等。。

2:将眼下枚举的数和题目所给的数进行枚举,看所给的条件的数与眼下枚举的的数的出现同样的数相等的数有多少个。。可是反复的书不算。。所以开个标志变量。。。

所以我的暴力枚举解法例如以下:

#include
#include
const int maxn=100+10;struct node{ int a,b,c;}point[maxn];int a[5],b[5];int mark[5];void pre_deal(int c,int d){ a[1]=c/1000; a[2]=c/100%10; a[3]=c/10%10; a[4]=c%10; b[1]=d/1000; b[2]=d/100%10; b[3]=d/10%10; b[4]=d%10;}int judge(int x,int y){ int count1,count2; count1=count2=0; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(mark,0,sizeof(mark)); pre_deal(x,point[y].a); for(int i=1;i<=4;i++) { if(a[i]==b[i]) count1++; } // printf("count1:%d\n",count1); if(count1!=point[y].c) return 0; for(int i=1;i<=4;i++) for(int j=1;j<=4;j++) { if(a[i]==b[j]&&!mark[j]) { mark[j]=1; count2++; break; } } //printf("count2:%d\n",count2); if(count2!=point[y].b) return 0; else return 1;}int main(){ int n,ok; int count,ans; while(scanf("%d",&n)!=EOF&&n) { count=0; for(int i=1;i<=n;i++) scanf("%d%d%d",&point[i].a,&point[i].b,&point[i].c); for(int i=1000;i<=9999;i++) { ok=1; for(int j=1;j<=n;j++) { ok=judge(i,j); if(!ok) break; } if(ok) { count++; ans=i; } if(count==2) break; } // printf("count:%d\n",count); if(count==1) printf("%d\n",ans); else printf("Not sure\n"); } return 0;}

转载于:https://www.cnblogs.com/mengfanrong/p/3871449.html

你可能感兴趣的文章
12.4站立会议
查看>>
Java Concurrentmodificationexception异常原因和解决方法
查看>>
客户端访问浏览器的流程
查看>>
codeforces水题100道 第二十二题 Codeforces Beta Round #89 (Div. 2) A. String Task (strings)
查看>>
c++||template
查看>>
[BZOJ 5323][Jxoi2018]游戏
查看>>
编程面试的10大算法概念汇总
查看>>
Vue
查看>>
python-三级菜单和购物车程序
查看>>
条件断点 符号断点
查看>>
VMware12 + Ubuntu16.04 虚拟磁盘扩容
查看>>
水平垂直居中
查看>>
MySQL简介
查看>>
设计模式之桥接模式(Bridge)
查看>>
jquery的$(document).ready()和onload的加载顺序
查看>>
Python Web框架Django (五)
查看>>
.net学习之继承、里氏替换原则LSP、虚方法、多态、抽象类、Equals方法、接口、装箱拆箱、字符串------(转)...
查看>>
【codevs1033】 蚯蚓的游戏问题
查看>>
【程序执行原理】
查看>>
python的多行注释
查看>>