一、高斯日记
题目详情:大数学家高斯有个好习惯:无论如何都要记日记。
他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210
后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?
高斯出生于:1777年4月30日。
在高斯发现的一个重要定理的日记上标注着:5343,因此可算出那天是:1791年12月15日。
高斯获得博士学位的那天日记上标着:8113
请你算出高斯获得博士学位的年月日。
提交答案的格式是:yyyy-mm-dd, 例如:1980-03-21
请严格按照格式,通过浏览器提交答案。
注意:只提交这个日期,不要写其它附加内容,比如:说明性的文字。
题解:
-
该题可直接使用excel直接进行计算天数。需要注意的是闰年
-
C++ 代码实现:通过天数的累加。
#include <iostream>
using namespace std;
int main(){
bool isLeapYear(int y);
int y = 1777;//年
int m = 4;//月
int d = 30;//日
for(int i = 1;i<8113;i++){
d++;
if(m==12 && d == 32){
m = 1;
y++;
d = 1;
continue;
}
if((m==1 || m==3 || m==5 || m==7 || m==8 || m==10 || m==12) && d==32){
m++;
d = 1;
continue;
}
if((m==4 || m==6 || m==9 || m==11) && d==31){
m++;
d = 1;
continue;
}
//当年份为闰年的时候,2月份是29天
if( m==2 && isLeapYear(y) && d == 30){
m++;
d = 1;
continue;
}
//当不是闰年的时候,天数为28天。
if( m==2 && !isLeapYear(y) && d == 29){
m++;
d = 1;
continue;
}
}
cout<<y<<" "<<m<<" "<<d<<endl;
return 0;
}
//判断是否为闰年。
bool isLeapYear(int y){
if(y%4==0 && y%100!=0 || y%400==0)
return true;
return false;
}
二、排他平方数
题目详情:小明正看着 203879 这个数字发呆。
原来,203879 * 203879 = 41566646641
这有什么神奇呢?仔细观察,203879
是个6位数,并且它的每个数位上的数字都是不同的,并且它平方后的所有数位上都不出现它自身的数字。
具有这样特点的6位数还有一个,请你照出它!
再归纳一下筛选要求:
- 6位数
- 每个数位上的数字不同
- 其平方数的每个数位不含原数字的任何组成数位
答案是一个6位的正整数。
请通过浏览器提交答案。
注意:只提交另一6位数,题中已经给出这个不要提交。
注意:不要书写其他内容(比如:说明性的文字)。
题解:
枚举出符合条件的数
#include <iostream>
#include <sstream>
using namespace std;
bool check(long long x,long long xx);
void i2s(long long x, string &basic_string);
int main(){
for(int i=1;i<10;i++){
for(int j=0;j<10;j++){
if(j!=i){
for(int k=0;k<10;k++){
if(k!=i && k!=j){
for(int l=0;l<10;l++){
if(l!=i && l!=j && l!=k){
for(int m=0;m<10;m++){
if(m!=i && m!=j && m!=k && m!=l){
for(int n=0;n<10;n++){
if(n!=i && n!=j && n!=k && n!=l && n!=m){
long long x = i*100000 + j*10000 + k*1000 +l*100 + m *10 +n;
long long xx = x*x;
if(check(x,xx)){
cout<<x<<" "<<x*x<<endl;
}
}
}
}
}
}
}
}
}
}
}
}
}
/*检查xx中是否有含有x中的数*/
bool check(long long x,long long xx){
string s_x,s_xx;
i2s(x,s_x);
i2s(x,s_xx);
for(int i=0;i<s_x.length();i++){
if(s_xx.find(s_x[i]) != string::npos){
return false;
}
}
return true;
}
//转成字符串
void i2s(long long x, string &basic_string){
stringstream ss;
ss << x;
ss >> basic_string;
}
三、振兴中华
题目详情:小明参加了校园的趣味运动会,其中的一个项目是:跳格子。
地上画着一些格子,每个格子里写一个字,如下所示
从我做起振
我做起振兴
做起振兴中
起振兴中华
比赛时,先站在左上角的写着“从”字的格子里,可以横向或纵向跳到相邻的格子里,但不能跳到对角的格子或者其他位置
要求跳过的路线刚好构成 “从我做起振兴中华” 这句话。
请你帮助小明算一算他一共有多少种可能的跳跃路线呢?
题解:
#include <iostream>
using namespace std;
int f(int x,int y){
if(x==3 || y==4) return 1;
return f(x+1,y) + f(x,y+1);
}
int main(){
cout<<f(0,0)<<endl;
return 0;
}