C语言-数字炸弹&汉诺塔

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');
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值