1. 高斯日记
大数学家高斯有个好习惯:无论如何都要记日记。
他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210
后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?
高斯出生于:1777年4月30日。
在高斯发现的一个重要定理的日记上标注着:5343,因此可算出那天是:1791年12月15日。
高斯获得博士学位的那天日记上标着:8113
请你算出高斯获得博士学位的年月日。
提交答案的格式是:yyyy-mm-dd, 例如:1980-03-21
请严格按照格式,通过浏览器提交答案。
注意:只提交这个日期,不要写其它附加内容,比如:说明性的文字。
思路:这题可以不用写代码,直接可以算出来,答案是:1799-07-16
2.排它平方数
小明正看着 203879 这个数字发呆。
原来,203879 * 203879 = 41566646641
这有什么神奇呢?仔细观察,203879 是个6位数,并且它的每个数位上的数字都是不同的,并且它平方后的所有数位上都不出现组成它自身的数字。
具有这样特点的6位数还有一个,请你找出它!
再归纳一下筛选要求:
1. 6位正整数
2. 每个数位上的数字不同
3. 其平方数的每个数位不含原数字的任何组成数位
答案是一个6位的正整数。
请通过浏览器提交答案。
注意:只提交另一6位数,题中已经给出的这个不要提交。
注意:不要书写其它的内容(比如:说明性的文字)。
思路:六位数的平方超出了int32和long的范围,所以我这里直接用一个20位的数组来存放num*num的结果,算法就是模拟连小学生都会的错位相加法。其次是判断i各个位上的数字是否相同,这里我用一个长度为10的数组n,i中出现的数字作为数组下标,然后遍历i的每一位wei进行n[wei]++操作,最后判断n中的值是否都为0 或1即可。
#include<stdio.h>
int n[10];
int cj[20];//
int isDifferent(int num)//判断每位是否不同
{
int ok =1;
do
{
n[num%10]++;
}while((num/=10)!=0);
for(int i=0;i<10;i++)
if(n[i]!=0&&n[i]!=1)
{
ok = 0;
break;
}
return ok;
}
void init()
{
int i;
for(i=0;i<10;i++)
{
n[i]=0;
}
for(i=0;i<20;i++)
{
cj[i]=0;
}
}
int main()
{
for(int num=123456;num<987655;num++)
{
if(isDifferent(num))
{
int temp=num;
for(int i=0;i<6;i++)
{
int mul=(temp%10)*num;
int index=i;
do
{
cj[index]+=mul%10;
if(cj[index]>=10)
{
cj[index+1]+=cj[index]/10;
}
cj[index]%=10;
index++;
}while((mul/=10)!=0);
temp/=10;
}
int ok=1,m;
for(m=19;cj[m]==0;m--)
;
for(;m>=0;m--)
{
for(int j=0;j<10;j++)
{
if(cj[m]==j&&n[j]==1)
ok=0;
}
}
if(ok)
{
printf("%d\n",num);
}
}
init();
}
return 0;
}
答案:639172
3.振兴中华
小明参加了学校的趣味运动会,其中的一个项目是:跳格子。
地上画着一些格子,每个格子里写一个字,如下所示: