题目标题: 高斯日记
大数学家高斯有个好习惯:无论如何都要记日记。
他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210
后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?
高斯出生于:1777年4月30日。
在高斯发现的一个重要定理的日记上标注着:5343,因此可算出那天是:1791年12月15日。
高斯获得博士学位的那天日记上标着:8113
请你算出高斯获得博士学位的年月日。
提交答案的格式是:yyyy-mm-dd, 例如:1980-03-21
1.代码如下
2.可以直接用计算机计算。
#include<stdio.h>
int main()
{
int f[40]={
31,28,31,30,31,30,31,31,30,31,30,31};
int a=0,num,year,month,day;
scanf("%d/%d/%d %d",&year,&month,&day,&num);
num+=day;
day=1;
if(year%4==0&&year%100!=0||year%400==0)
f[1]=29;
for(month,a=0;month>1;month--)
{
num+=f[a];
a++;
}
for(num;num>=365;)
{
if(year%4==0&&year%100!=0||year%400==0)
{
num-=366;
year++;}
else
{
num-=365;
year++;}
}
if((year%4==0&&year%100!=0)||year%400==0)
f[1]=29;
for(a=0;num-f[a]>0;a++)
{
num-=f[a];
month++;
}
printf("%d/%d/%d",year,month,num-1);
return 0;
}
2.标题: 马虎的算式
小明是个急性子,上小学的时候经常把老师写在黑板上的题目抄错了。
有一次,老师出的题目是: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 这样的算式一共有多少种呢?
请你利用计算机的优势寻找所有的可能,并回答不同算式的种类数。
满足乘法交换律的算式计为不同的种类,所以答案肯定是个偶数。
答案直接通过浏览器提交。
注意:只提交一个表示最终统计种类数的数字,不要提交解答过程或其它多余的内容。
#include<stdio.h>
#include<string.h>
int n[10],d=0;
int main()
{
int a5,num=0;
for(int a=1;a<10;a++)
for(int b=1;b<10;b++)
for(int c=1;c<10;c++)
for(int d=1;d<10;d++)
for(int e=1;e<10;e++)
{
if(((a*10+b)*(c*100+d*10+e))==((a*100+d*10+b)*(c*10+e)))
{
n[a]++,n[b]++,n[c]++,n[d]++,n[e]++;
for(a5=1;a5<=10;a5++)
{
if(n[a5]>1)
break;
}
if(a5>9)
{
num++;printf("%d %d% d %d %d\n",a,b,c,d,e);
}
memset(n,0,sizeof(n));
}
}
printf("%d",num);
return 0;
}
5个for循环暴力到底
题目标题: 第39级台阶
小明刚刚看完电影《第39级台阶》,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级!
站在台阶前,他突然又想着一个问题:
如果我每一步只能迈上1个或2个台阶。先迈左脚,然后左右交替,最后一步是迈右脚,也就是说一共要走偶数步。那么,上完39级台阶,有多少种不同的上法呢?
请你利用计算机的优势,帮助小明寻找答案。
要求提交的是一个整数。
注意:不要提交解答过程,或其它的辅助说明文字。
递推
#include<stdio.h>
int main()
{
int a,b,c,d;
int n[40][10];
n[1][1]=1;
n[1][2]=0;
n[2][1]=1;
n[2][2]=1;
for(int k=3;k<=39;k++)
{
n[k][1]=n[k-1][2]+n[k-2][2];
n[k][2]=n[k-1][1]+n[k-2][1];
}
printf("%d",n[39][2]);
return 0;
}
dfs暴力搜索
#include<stdio.h>
int sum;
void dfs(int n,int k)//k为走的步数。、、n为台阶数
{
if(n>39) return;//结束条件
if(n==39&&k%2==0)//j结束条件
{
sum++;
return;
}
dfs(n+1,k+1);//寻找
dfs(n+2,k+1);
}
int main()
{
sum=0;
dfs(0,0);
printf("%d",sum);
return 0;
}