HDU1172 猜数字
猜数字
Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 2313 Accepted Submission(s): 1329
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
本题采用的是暴力搜索法,在1000至9999中寻找满足已经给出的那些数的情况,看看是不是每一个都符合,如果有这样的数且在1000到9999中只有一个,那么就是这个数,如果有多个,那么这个数就是不确定的数
#include<stdio.h>
#include<string.h>
struct node
{
int number,lock,sum;
}per[150];
int Check(int n,int m)
{
int a[4],b[4],sign[4],i,j,sumn;
for(i=0;i<4;i++) sign[i]=0;
a[0]=n/1000;
a[1]=(n/100)%10;
a[2]=(n/10)%10;
a[3]=n%10;
b[0]=per[m].number/1000;
b[1]=(per[m].number/100)%10;
b[2]=(per[m].number/10)%10;
b[3]=per[m].number%10;
sumn=0;
for(i=0;i<4;i++)//判断位置相同数
{
if(a[i]==b[i])
sumn++;
}
if(sumn!=per[m].lock) return 0;
sumn=0;
for(i=0;i<4;i++)//判断数字相同数
{
for(j=0;j<4;j++)
{
if(a[i]==b[j]&&sign[j]==0)//Bug:只能比较一次
{sumn++;sign[j]=1;break;}
}
}
if(sumn!=per[m].sum) return 0;
return 1;
}
int main()
{
int i,j,n,flag,Sum,num;
while(scanf("%d",&n),n!=0)
{
for(i=0;i<n;i++)
scanf("%d%d%d",&per[i].number,&per[i].sum,&per[i].lock);
flag=0;Sum=0;
for(i=1000;i<=9999;i++)
{
for(j=0;j<n;j++)
{
flag=Check(i,j);
if(!flag)break;
}
if(flag==1)
{Sum++;num=i;}
}
if(Sum==1)
printf("%d\n",num);
else
printf("Not sure\n");
memset(per,0,sizeof(per));
}
return 0;
}
HDU1172 猜数字相关推荐
- HDU1172 猜数字【暴力+进制】
猜数字 Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- hdu1172 猜数字(java)
每日一看 题意: /** * @param args * 猜数字游戏是gameboy最喜欢的游戏之一.游戏的规则是这样的: * 计算机随机产生一个四位数,然后玩家猜这个四位数是什么. * 每猜一个数, ...
- hdu1172猜数字
猜数字 Problem Description 猜数字游戏是gameboy最喜欢的游戏之一.游戏的规则是这样的:计算机随机产生一个四位数,然后玩家猜这个四位数是什么.每猜一个数,计算机都会告诉玩家猜对 ...
- HDU-1172 猜数字
猜数字游戏是gameboy最喜欢的游戏之一.游戏的规则是这样的:计算机随机产生一个四位数,然后玩家猜这个四位数是什么.每猜一个数,计算机都会告诉玩家猜对几个数字,其中有几个数字在正确的位置上. 比如计 ...
- HDU1172猜数字 [模拟]
1.题意 任务是猜一个四位数,每次尝试后会给出这次猜中了几个数字和猜中了几个位置,求能否根据尝试的记录给出答案 2.分析 数据给出查询次数和每次查询的数及其有几个数和几个位置符合,值得注意的是,猜对的 ...
- hdu---1172猜数字
题意: 系统生成一个四位数,你猜n次,每次告诉你对的数字有几个,和对的位置有几个.n次之后问你能否确定这个数 题目链接 tips: 1.枚举法,正难则反,由条件去确定太繁琐时,可以枚举去验证每个条件 ...
- HDU-1172 猜数字 广搜
http://acm.hdu.edu.cn/showproblem.php?pid=1172 这题要换个思维,不要想着如何通过已有的条件来得到正确的值,而是枚举0000-9999这10000个数,看满 ...
- 暴力——猜数字(hdu1172)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1172 题目描述: 猜数字游戏是gameboy最喜欢的游戏之一.游戏的规则是这样的:计算机随机产生一个 ...
- LeetCode简单题之猜数字大小
题目 猜数字游戏的规则如下: 每轮游戏,我都会从 1 到 n 随机选择一个数字. 请你猜选出的是哪个数字. 如果你猜错了,我会告诉你,你猜测的数字比我选出的数字是大了还是小了. 你可以通过调用一个预先 ...
- L1-056 猜数字 (结构体解决)
L1-056 猜数字 (20 分) 一群人坐在一起,每人猜一个 100 以内的数,谁的数字最接近大家平均数的一半就赢.本题就要求你找出其中的赢家. 输入格式: 输入在第一行给出一个正整数N(≤104) ...
最新文章
- Linux系统——架构浅析
- 第15课:基于 CRF 的中文命名实体识别模型实现
- 第九节:JWT简介和以JS+WebApi为例基于JWT的安全校验
- 弹性负载均衡:负载无限,均衡有道【华为云分享】
- arm-linux启动,linux启动流程arm
- SCU 2941 I NEED A OFFER!(01背包变形)
- Facebook界面设计、网络操作系统和SNS大锅饭。
- 简单几步教会你画出透明丝袜,初学者画出透明质感
- MATLAB调用电脑摄像头前安装图像采集工具箱硬件支持包
- 手机上万里挑一的CAD看图软件,好用到颠覆你的世界观!
- oracle优化方法,九大Oracle性能优化基本方法详解
- 继电器控制实验程序c语言,继电器原理及实验程序
- 51.la申请免费统计代码
- 计算机网络——模拟信号(四)
- 新房装修选电视机还是投影仪?装修投影仪避坑指南
- 企业公众号运营见效难,如何突围?
- java的时间日期类_Java基础学习:日期时间类
- 机器学习实战2(决策树篇)
- 解决报错:Fan in and fan out can not be computed for tensor with fewer than 2 dimensions
- Windows Update彻底禁用/禁用后自动开启的解决办法
热门文章
- (pattern),(?:pattern),(?=pattern)(?!pattern)不明白,让我豁然开朗的文章
- PCB中产生电磁干扰的原因及消除干扰技巧
- linux和windows局域网连接网络,linux与windows局域网互访
- 设计模式-一些输出方式demo
- 请设计输出实数的格式,包括:⑴一行输出一个实数;⑵一行内输出两个实数;⑶一行内输出三个实数。实数用6.2f格式输出。
- 2016最新php授权验证系统v2.1,2016PHP受权验证系统V2.1完整版,域名+IP双重验证 一键升级受权系统 完美无错...
- (转)sqlite developer注册方法
- 未来互联网+大数据时代,DT革命互联网大数据应用简析
- ASP.NET农历时间显示(两)
- 【什么是DOM和BOM】