1.数字炸弹
制作简单的猜数字游戏,程序运行时自动产生1~100的随机数字,接着等待键盘输入猜的数字,若输入的数字不对,那么现在猜数字的范围就缩小,直至猜对为止。
(1).随机数的产生
C语言提供srand()函数,配合rand()函数可产生介于0~32767之间的随机数(函数均包含在stdlib.h中)。
srand((unsigned int)time(NULL));//做随机数产生器的种子,time()函数包含在time.h中
guess=rand()//以上得到种子随机在0~32767产生整数
(2).1~100之间的随机数
首先用rand()函数产生的随机数,然后对100求余(rand()%100,产生0~99之间的整数,然后加一,即rand()%100+1就可以产生1~100之间的随机数)
代码实现如下:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int i,date;
int left=0,right=100;
srand((unsigned int)time(NULL));//做随机数产生器的种子
date=rand()%100+1;//以上得到种子随机在0~32767产生整数
printf("请在%d~到%d中输入一个数字:\n",left,right);
scanf("%d",&i);
while(i!=date)
{
if(i>date)
{
printf("猜大了!");
right=i;
printf("请在%d~到%d中输入一个数字:\n",left,right);
}
else
{
printf("猜小了!");
left=i;
printf("请在%d~到%d中输入一个数字:\n",left,right);
}
scanf("%d",&i);
}
if(i==date)
{
printf("bingo!");
}
return 0;
}
2.汉诺塔
(1).汉诺塔的由来
法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。
印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面。僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而梵塔、庙宇和众生也都将同归于尽。
(2).游戏规则
1、有三根相邻的柱子,标号为A,B,C。
2、A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘。
3、现在把所有盘子借助柱子B移动到柱子C上,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方。
在游戏中,由于每次只能移动一个圆盘,所以在移动的过程中显然要借助另外一根针才可以实施。也就是说,步骤 1 将 1~63 个盘子移到 Y 上,需要借助 Z;步骤 3 将 Y 针上的 63 个盘子移到 Z 针上,需要借助 X。汉诺塔的拆解过程刚好满足递归算法的定义,因此,对于如此难题,使用递归来解决,问题就变得相当简单了!
代码实现如下:
#include <stdio.h>
void hanoi(int n,char x,char y,char z);
void hanoi(int n,char x,char y,char z)
{
if(n==1)
{
printf("%c-->%c\n",x,z);
}
else
{
hanoi(n-1,x,y,z);
printf("%c-->%c\n",x,z);
hanoi(n-1,y,x,z);
}
}
int main(void)
{
int n;
printf("汉诺塔层数为:");
scanf("%d",&n);
hanoi(n,'x','y','z');
}