【原创源码】猜数游戏源代码以及猜数秘诀
本帖最后由 繁华落幕 于 2015-11-14 22:00 编辑{:1_936:}本宝宝刚学C语言,只能把这个程序做成这样了,附猜数秘诀。大牛勿喷,纯属新(po)手(shi)帖(shui)
其实,有了这个秘诀以后,猜1-100内的数只需要7次就可以猜出哦~
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
system("title 非正常人类研究所开发的猜数游戏");//本宝宝程序的标题,我一定不会告诉你title后面的空格不能丢
srand(time(0));
int number = rand()%100+1;//随机产生的1-100之间变量 %100则是对100取余 x%n的结果是的一个整数
int count = 0;//猜想的次数
int a = 0;//输入的数
printf("本宝宝已经想好一个1到100之间的整数。\n");
do{
printf("请猜想这个数:");
scanf("%d", &a);//输入的数(a)
count ++;//每输入一次则让count+1
if ( a > number ){//判断a是否大于number
printf("您所猜想的这个数大了\n");//如果大于则输出该行
} else if ( a < number ){//否则继续判断a是否小于number
printf("您所猜想的这个数小了\n");//如果小于则输出该行
}
} while ( a != number );//如果输入的数为随机产生的数则走出判定,执行下面的代码,反之将继续进行do-while循环
printf("恭喜,你用了%d次成功将本数[%d]猜出,游戏结束!\n", count, number);//输出猜想的次数以及正确答案
system("pause");//防止编译出来的exe文件在执行完后就一闪而"退",代码作用:按任意键继续...
return 0;
}
其实猜数秘诀就是“二分法”,也就是说对半分嘛,二分法,就是通过不断的分割(其实就是中分法),从而求出零点的近似值。
例如:先猜100的一半,猜出50:
如果大了就把50对半分,猜出50-25=25:
如果大了就把25对半分,得到12/13,猜出25-12/13=13/12
<以此类推>
如果小了就把25对半分,得到12/13,猜出25+12/13=37/38
<以此类推>
如果小了也把50对半分,猜出50+25=75:
如果大了就把25对半分,得到12/13,猜出75-12/13=63/62
<以此类推>
如果小了就把25对半分,得到12/13,猜出75+12/13=87/88
<以此类推>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Random ran = new Random();
int num = ran.Next(1,100);
//储存一个数 你输入的
int guess = -1 ;
// i 来记录你猜了多少次
int i = 0;
Console.WriteLine("欢迎来到猜数字游戏:");
Console.WriteLine("我们将产生一个随机数1-100");
Console.WriteLine("猜对了即可退出游戏");
do{
Console.WriteLine("请输入你要猜的数字:");
guess = int.Parse(Console.ReadLine());
i++;
if(num>guess){
Console.WriteLine("你猜的小了");
}else if(num<guess){
Console.WriteLine("你猜的大了");
}else if(num==guess){
Console.WriteLine("恭喜你猜对了");
}
}while(guess!=num);
Console.WriteLine("你一共猜了" + i + "次!");
Console.ReadLine();
}
}
}
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
//产生一个随机数Num随机数取1-100之间
int num = (int)(Math.random()*100+1);
//储存一个数 你输入的
int guess = -1 ;
// i 来记录你猜了多少次
int i = 0;
System.out.println("欢迎来到猜数字游戏:");
System.out.println("我们将产生一个随机数1-100");
System.out.println("猜对了即可退出游戏");
do{
System.out.print("请输入你要猜的数字:");
guess = in.nextInt();
i++;
if(num>guess){
System.out.println("你猜的小了");
}else if(num<guess){
System.out.println("你猜的大了");
}else if(num==guess){
System.out.println("恭喜你猜对了");
}
}while(guess!=num);
System.out.println("你一共猜了"+i+"次!");
}
}
本帖最后由 Dicker 于 2015-11-14 22:14 编辑
虽然是 新手贴 ,,但我是个 菜鸟 谢谢楼主 的贴 。。每一个 新手贴 都会帮到 很多 人的!! 想方法不错啊,支持你 感谢发布原创作品,吾爱破解论坛因你更精彩. 不错当初我一个朋友就当着面给我写了这个代码,当时我还不懂 楼主,这个代码感觉是你来浑水的,好简单的逻辑 给你加油,这个二分的思路还是很好的。以后二分的东西还会很多~ 代码注释不错 你怎么自己接触置顶了~ 2的7次方就128了。
这个方法效率非常高,数越多越能体现。
看过一节公开课,哈佛的老师讲CS50
我不知道那是什么,不过他用两个实例也是这个思路。
在一本厚厚的电话本上查找某个人的电话,一次撕掉一半。
数讲堂里的人数,也是一次翻一倍。数完后,如果再进来同样多的人,仅仅需再进行一次计算。
页:
[1]
2