蓝桥杯备战第一天——【高斯日记】【马虎的算式】

蓝桥杯备战第一天

今天开始准备蓝桥杯比赛,我是直接开始刷真题的,从以前的题库开始研究各个真题,并从中学习不同的算法。接下来是我今天的收获:

问题一

[问题描述]
/*大数学家高斯有个好习惯:无论如何都要记日记。

他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210

后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?
高斯出生于:1777年4月30日。

在高斯发现的一个重要定理的日记上标注着:5343,因此可算出那天是:1791年12月15日。

高斯获得博士学位的那天日记上标着:8113

请你算出高斯获得博士学位的年月日。
提交答案的格式是:yyyy-mm-dd, 例如:1980-03-21
*/

我的解题思路
自1977年04月30日开始计数,过了n天后,是XXXX年XX月XX日?
我的解题方法
1.利用exce表格直接推算日期,这个方法虽然与编程比赛大相径庭,但可以快速求出问题的答案,下面是我推算的方法。
在这里插入图片描述
闰年2月份是29天,这是关键所在。

2.我利用程序代码也去实现了问题,下面是我的代码。

#include<stdio.h>
int main()
{
	int date;
	scanf("%d",&date);
	  
	int year=1777;
	int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
	int i=3;
	while(date>a[i+1])
	{
		i++;
		date-=a[i];
		
		
		if(i==0)
		{
			year+=1;
			if(year%4==0&&year%100!=0||year%400==0)   //判断2月的天数 
			{
				a[1]=29;
			}else{
				a[1]=28;
			}
		}
		if(i==11)    //12月之后就跳转到1月 
		{
			i=-1;
		}
	} 
	if(date==1)
		printf("%d-%d-%d",year,i+1,a[i]);
	else
		printf("%d-%d-%d",year,i+2,date-1);
	return 0;
	
}

正确答案是
1799-07-16

问题反思

在代码实现中出现了许多错误,例如年底最后一天没办法计算出来,245与246天时就会出现程序乱码,希望各位能告诉我问题所在。

问题二

[问题描述]
/*小明是个急性子,上小学的时候经常把老师写在黑板上的题目抄错了。
有一次,老师出的题目是:36 x 495 = ?
他却给抄成了:396 x 45 = ?
但结果却很戏剧性,他的答案竟然是对的!!
因为 36 * 495 = 396 * 45 = 17820
类似这样的巧合情况可能还有很多,比如:27 * 594 = 297 * 54
假设 a b c d e 代表1~9不同的5个数字(注意是各不相同的数字,且不含0)
能满足形如: ab * cde = adb * ce 这样的算式一共有多少种呢?
*/
我的解题思路
1.将三位数中间的数字拿出来放到两位数的中间, 更换前后两数的乘积相等.
2.因为有 5 个不同的数字, 每个数字都可能取 1 到 9 不同的数字(不包括 0), 因此使用 5 层 for 循环, 将每个数字都从 1 尝试到 9, 看看是否满足 “ab * cde = adb * ce” 这样的形式.
我的解题方法
利用循环嵌套,来完成题目要求的限制,即a,b,c,d,e都是1-9的数字,且a!=b!=c!=d!=e的要求。下面是我的代码:

#include<stdio.h>

int main()
{
 int s=0;
for(int a=1;a<10;a++)
 {
  for(int b=1;b<10;b++)
  {
   //if(a!=b)
   for(int c=1;c<10;c++)
   {
	//if(c!=b&&c!=a)
	for(int d=1;d<10;d++)
	{
	// if(d!=a&& d!=b &&d!=c)
	 for(int e=1;e<10;e++)
	{
	  if(e!=a&& e!=b && e!=c &&e!=d&&d!=a&& d!=b &&d!=c&&c!=b&&c!=a&&a!=b)
	  {
	   if((a*10+b)*(c*100+d*10+e)==(a*100+d*10+b)*(c*10+e))
	   s++;
	  }
	 }
	}
   }
   
  }
 }
 printf("%d",s);
 return 0;
}

正确答案是142
问题反思
我想将这个问题的所有可能都i打印出来,展示并做一检验,但由于时间问题没将代码写出来,明天我会将其代码写出来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值