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 % 

1 0
原创粉丝点击