C指针原理(71)-C快速入门(6)
来源:互联网 发布:可以让人变老的软件 编辑:程序博客网 时间:2024/05/17 22:17
(6)自动猜数算法
能不能让电脑程序拥有智能,让程序来猜数字呢?肯定可以,通过一定的算法就能实现。什么是算法?
算法在中国古代文献中称为“术”,最早出现在《周髀算经》、《九章算术》。特别是《九章算术》,给出四则运算、最大公约数、最小公倍数、开平方根、开立方根、求素数的埃拉托斯特尼筛法,线性方程组求解的算法。三国代的刘徽给出求圆周率的算法:刘徽割圆术。
欧几里得算法被人们认为是史上第一个算法。第一次编写程序是Ada Byron于1842年为巴贝奇分析机编写求解解伯努利微分方程的程序,因此Ada Byron被大多数人认为是世界上第一位程序员。
麦好的AI乐园博客所有内容是原创,如果转载请注明来源
http://blog.csdn.net/myhaspl/
算法的核心是创建问题抽象的模型和明确求解目标,之后可以根据具体的问题选择不同的模式和方法完成算法的设计。
为了能让程序实现自动猜数,必须假设一个前提:程序不知道要猜的数字,也就是说这个算法中只能与要猜的数字进行比较,而不能直接“知道”要猜的数字值。可将算法设计如下:
第一步,设数字范围R为1-500。
第二步,取范围R以内的中间值A,把A作为程序模仿人类猜测出的数字。
第三步,将猜测的数字A与被猜的结果B比较
(1)如果A>B,则将R的上限设为A,回到第二步。
(2)如果A<B,则R的下限设为A ,回到第二步。
(3)如果A=B,则退出程序,提示猜中数字,进入第四步。
第四步,在屏幕上输出A和B,并提示猜中数字。
根据上面的算法来编写以下程序:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//code:myhaspl@myhaspl.com
//date:2014-01-23
//未与作者书面联系,请勿将本程序用于任何用途
int getnumber(){
srand((int)time(0));
return rand()%499+1;
}
int main(){
int mynum;
int ispass=0;
int guessnum=getnumber();
int myrange[2]={1,500};
while (1){
mynum=(myrange[0]+myrange[1])/2;
if (mynum>guessnum){
printf("程序猜的数字为%d,数字大了!\n",mynum);
myrange[1]=mynum;
}
else if(mynum<guessnum){
printf("程序猜的数字为%d,数字小了!\n",mynum);
myrange[0]=mynum;
}
else{
printf("程序猜的数字为%d, 被猜的数字为%d,猜中了!\n",mynum,guessnum);
break;
}
}
}
麦好的AI乐园博客所有内容是原创,如果转载请注明来源
http://blog.csdn.net/myhaspl/
运行后,结果为:
dp@dp:~/cquick % gcc guessnum.c -o myguess
dp@dp:~/cquick % ./myguess
程序猜的数字为250,数字大了!
程序猜的数字为125,数字小了!
程序猜的数字为187,数字大了!
程序猜的数字为156,数字小了!
程序猜的数字为171,数字大了!
程序猜的数字为163,数字小了!
程序猜的数字为167, 被猜的数字为167,猜中了!
dp@dp:~/cquick %
- C指针原理(71)-C快速入门(6)
- C指针原理(71)-C快速入门(4)
- C指针原理(71)-C快速入门(5)
- C指针原理(68)-C快速入门(1)
- C指针原理(69)-C快速入门(2)
- C指针原理(70)-C快速入门(3)
- C指针原理(6)
- C#--快速入门(一)
- 1.快速入门(c++)
- C指针原理(30)-at&t汇编-快速排序
- 《C和指针》快速入门的例子分析及其扩展
- C指针原理(33)-C指针基础
- C指针原理(18)-C指针基础
- C指针原理(19)-C指针基础
- C指针原理(20)-C指针基础
- C指针原理(21)-C指针基础
- C指针原理(22)-C指针基础
- C指针原理(23)-C指针基础
- Debug Assertion Failed! f:\sp\vctools\vc7libs\ship\atlmfc\src\mfc\dlgdata.cpp Line: 42
- 宏定义的黑魔法 - 宏菜鸟起飞手册
- 五 手游开发神器 cocos2d-x editor 之贴图(TexturePacker)
- java中 Integer.parseInt()和Integer.valueOf(“str”).intValue()方法的应用
- php设计模式
- C指针原理(71)-C快速入门(6)
- 编程恶习
- USB History Viewing
- bind开启IPv6功能
- UVa 11549 Calculator Conundrum / floyd判圈算法
- DLNA开发——libupnp和PlatinumKit基础库对比
- Makefile的特殊目标
- Leetcode: Longest Valid Parentheses
- ftp匿名上传配置