备战蓝桥杯第四天——【抓交通肇事犯】【兔子产子问题】

今天的学习问题是

【抓交通肇事犯】

【问题描述】
/*
一辆卡车违反交通规则,撞人后逃逸。现场有三个人目击事件,但都没有记住车号,只记得车号的一些特征。甲说:牌照的前两位数是相同的;乙说:牌照的后两位是相同的,但与前两位不同;丙说:四位的车号刚好是一个整数的平方。请根据以上线索求出车号。
*/
【问题分析】
按照题目的要求,是要寻找一个前两位数相同、后两位数相同且相互间又不相同的4位整数,然后判断这个整数是否是另一个整数的平方。即求一个满足以上条件的四位数。

【算法设计】
对于这类问题,首先想到穷举法,于是我们先找满足前两个条件的整数,然后让其开平方运算,看是否能满足第二个条件。
1)车牌是四位,开平方的话应该是比31大一点,而比32小一点,于是我们可以用循环的方式让其验证条件二。
2)我们首先穷举所有满足条件一的数字,即aabb,a!=b。

【程序】

#include<stdio.h>

int main()
{
	int A,B,ID,num;			//定义了前两位数A、后两位数B以及车牌号ID
	for(A=0;A<10;A++)
		for(B=0;B<10;B++)
		{
			if(A!=B)		//限制前后数字不同 
		{
			ID=1000*A+100*A+10*B+B;	//求出车牌号 
			for(num=31;num<100;num++)
			{
				if(ID==num*num)
				printf("%d",ID);
			}
		}
			
			
		} 
} 

结果是:7744

【兔子产子问题】

【问题描述】
/*
有一对兔子,从出生的第3个月起,每月都生一对兔子。小兔子长到3月后每月又生一对兔子,假设所有兔子不死,问30个月内,每月兔子个数是多少?
*/
【问题分析】
针对这个问题,我画了一个月份与兔子数目对照表:
在这里插入图片描述
我发现每个月的兔子总数满足斐波那契数列的特征,于是我将这个问题看为求斐波那契数列的问题,它的规律是前两个数字之和等于第三个数,即n+1=n+n-1。

【算法设计】
给出第一个与第二个数,利用递归的方式计算出30个月内每个月兔子的对数。
第一个数为1,第二个数为1。
【程序】

#include<stdio.h>

int rabbish(int x)
{
	int num=0,flag = 1,flag1 = 1;
	int i;
	
	for (i=3;i<=x;i++)
	{
		num = flag + flag1;
		flag=flag1;
		flag1=num;
	}
	return num;
}

int main()
{
	int month,num2;
	printf("请输入月份");
	scanf("%d",&month);
	num2 = rabbish(month);
	printf("第%d个月兔子的对数为%d",month,num2);
} 

这个程序可以算出每个月的兔子对数。
在这里插入图片描述
下面这个程序可以算出多少个月以内所有月份兔子的个数。

#include<stdio.h>

int rabbish(int x)
{
	int num=0,flag = 1,flag1 = 1;
	int i;
	
	for (i=3;i<=x;i++)
	{
		num = flag + flag1;
		flag=flag1;
		flag1=num;
		printf("%10d",num);
	}
	return num;
}

int main()
{
	int month,num2;
	printf("请输入月份");
	scanf("%d",&month);
	printf("1	1");
	num2 = rabbish(month);
	
} 

结果是:
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值