一、 高斯日記
大數(shù)學(xué)家高斯有個好習(xí)慣:無論如何都要記日記。
他的日記有個與眾不同的地方,他從不注明年月日,而是用一個整數(shù)代替,比如:4210
后來人們知道,那個整數(shù)就是日期,它表示那一天是高斯出生后的第幾天。這或許也是個好習(xí)慣,它時時刻刻提醒著主人:日子又過去一天,還有多少時光可以用于浪費呢?
高斯出生于:1777年4月30日。
在高斯發(fā)現(xiàn)的一個重要定理的日記上標(biāo)注著:5343,因此可算出那天是:1791年12月15日。
高斯獲得博士學(xué)位的那天日記上標(biāo)著:8113
請你算出高斯獲得博士學(xué)位的年月日。
提交答案的格式是:yyyy-mm-dd, 例如:1980-03-21
請嚴(yán)格按照格式,通過瀏覽器提交答案。
注意:只提交這個日期,不要寫其它附加內(nèi)容,比如:說明性的文字。
解析:
新建文檔 1.vbs
Msgbox dateadd("d",8112,"1777-04-30")
答案:1799-07-16
二、馬虎的算式
小明是個急性子,上小學(xué)的時候經(jīng)常把老師寫在黑板上的題目抄錯了。
有一次,老師出的題目是:36 x 495 = ?
他卻給抄成了:396 x 45 = ?
但結(jié)果卻很戲劇性,他的答案竟然是對的??!
因為 36 * 495 = 396 * 45 = 17820
類似這樣的巧合情況可能還有很多,比如:27 * 594 = 297 * 54
假設(shè) a b c d e 代表1~9不同的5個數(shù)字(注意是各不相同的數(shù)字,且不含0)
能滿足形如: ab * cde = adb * ce 這樣的算式一共有多少種呢?
請你利用計算機(jī)的優(yōu)勢尋找所有的可能,并回答不同算式的種類數(shù)。
滿足乘法交換律的算式計為不同的種類,所以答案肯定是個偶數(shù)。
答案直接通過瀏覽器提交。
注意:只提交一個表示最終統(tǒng)計種類數(shù)的數(shù)字,不要提交解答過程或其它多余的內(nèi)容。
解析:簡單的枚舉
#include <iostream>
using namespace std;
int main()
{
int ans=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!=a)&&(c!=b))
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))
// ab * cde = adb * ce
if ( (10*a+b)*(100*c+10*d+e)==(100*a+10*d+b)*(10*c+e))
ans++;
}
}
}
}
}
cout<<ans;
return 0;
}
答案:142
三、第39級臺階
小明剛剛看完電影《第39級臺階》,離開電影院的時候,他數(shù)了數(shù)禮堂前的臺階數(shù),恰好是39級!
站在臺階前,他突然又想著一個問題:
如果我每一步只能邁上1個或2個臺階。先邁左腳,然后左右交替,最后一步是邁右腳,也就是說一共要走偶數(shù)步。那么,上完39級臺階,有多少種不同的上法呢?
請你利用計算機(jī)的優(yōu)勢,幫助小明尋找答案。
要求提交的是一個整數(shù)。
注意:不要提交解答過程,或其它的輔助說明文字。
解析:此題可用遞歸求解
#include <iostream>
using namespace std;
int ans;
void f(int n,int step){//n:剩下的階梯數(shù) step:已走的步數(shù)
if(n<0)//錯誤走法
return;
if(n==0&&step%2==0){//階梯數(shù)走完且步數(shù)為偶數(shù)
ans++;
}
f(n-1,step+1);//一步邁上1個臺階
f(n-2,step+1);//一步邁上2個臺階
}
int main()
{
f(39,0);
cout<<ans<<endl;
return 0;
}
答案:51167078
五、前綴判斷
如下的代碼判斷 needle_start指向的串是否為haystack_start指向的串的前綴,如不是,則返回NULL。
比如:"abcd1234" 就包含了 "abc" 為前綴
char* prefix(char* haystack_start, char* needle_start)
{
char* haystack = haystack_start;
char* needle = needle_start;
while(*haystack && *needle){
if(______________________________) return NULL; //填空位置
}
if(*needle) return NULL;
return haystack_start;
}
請分析代碼邏輯,并推測劃線處的代碼,通過網(wǎng)頁提交。
注意:僅把缺少的代碼作為答案,千萬不要填寫多余的代碼、符號或說明文字??!
解析:
# include <iostream>
using namespace std;
char* prefix(char* haystack_start, char* needle_start)
{
char* haystack = haystack_start;//母串
char* needle = needle_start;//前綴
while(*haystack && *needle){//兩個指針沒有越界
// if(______________________________) //填空位置
//移動指針并判斷
if(*(haystack++) != *(needle++)) return NULL; //填空位置
}
if(*needle) return NULL;//neddle比haystack長
return haystack_start;
}
int main()
{
char * haystack = "abcd1234"; //要判斷的字符串
char * needle = "abc"; //前綴
cout<<prefix(haystack, needle);
return 0;
}
答案:*(haystack++) != *(needle++)
六、三部排序
一般的排序有許多經(jīng)典算法,如快速排序、希爾排序等。
但實際應(yīng)用時,經(jīng)常會或多或少有一些特殊的要求。我們沒必要套用那些經(jīng)典算法,可以根據(jù)實際情況建立更好的解法。
比如,對一個整型數(shù)組中的數(shù)字進(jìn)行分類排序:
使得負(fù)數(shù)都靠左端,正數(shù)都靠右端,0在中部。注意問題的特點是:負(fù)數(shù)區(qū)域和正數(shù)區(qū)域內(nèi)并不要求有序??梢岳眠@個特點通過1次線性掃描就結(jié)束戰(zhàn)斗!!
以下的程序?qū)崿F(xiàn)了該目標(biāo)。
其中x指向待排序的整型數(shù)組,len是數(shù)組的長度。
void sort3p(int* x, int len)
{
int mod = 0;
int left = 0;
int right = len-1;
while(mod<=right){
if(x[mod]<0){
int t = x[left];
x[left] = x[mod];
x[mod] = t;
left++;
mod++;
}
else if(x[mod]>0){
int t = x[right];
x[right] = x[mod];
x[mod] = t;
right--;
}
else{
__________________________; //填空位置
}
}
}
如果給定數(shù)組:
25,18,-2,0,16,-5,33,21,0,19,-16,25,-3,0
則排序后為:
-3,-2,-16,-5,0,0,0,21,19,33,25,16,18,25
請分析代碼邏輯,并推測劃線處的代碼,通過網(wǎng)頁提交
注意:僅把缺少的代碼作為答案,千萬不要填寫多余的代碼、符號或說明文字??!
解析:快速排序的變種
#include <iostream>
using namespace std;
void sort3p(int* x, int len)
{
int mod = 0;
int left = 0;
int right = len-1;
while(mod<=right){
if(x[mod]<0){
int t = x[left];
x[left] = x[mod];
x[mod] = t;
left++;
mod++;
}
else if(x[mod]>0){
int t = x[right];
x[right] = x[mod];
x[mod] = t;
right--;
}
else{//==0
// __________________________; //填空位置
mod++;
}
}
}
int main(void)
{
int x[] = {25,18,-2,0,16,-5,33,21,0,19,-16,25,-3,0};
sort3p(x, 14);
for(int i = 0; i < 14; i++) {
cout<<x[i]<<" ";
}
return 0;
}