藍橋杯校賽題目以及解析
題目一
輸入一個字串,求它包含多少個單詞。單詞間以一個或者多個空格分開。
第一個單詞前,最後一個單詞後也可能有0到多個空格。
比如:" abc xyz" 包含兩個單詞,"ab c xyz " 包含3個單詞。
如下的程式解決了這個問題,請填寫劃線部分缺失的程式碼。
注意:只填寫劃線部分的程式碼,不要填寫任何多餘的內容。比如已經存在的小括號,註釋或說明文字等。
int get_word_num(char* buf)
{
intn = 0;
inttag = 1;
char*p = buf;
for(;*p!=0&& *p!=13 && *p!=10;p++)//個人感覺 *p!=13 && *p!=10,
//好像字元數組裡面不能儲存換行和回車符吧,所以也就不需要判斷字元是否為換行和回車符了。
{
if(*p=='' && tag==0) tag=1;
if(_____________________ ) //填空
{
n++;
tag=0;
}
}
returnn;
}
int main()
{
charbuf[1000];
fgets(buf,1000,stdin);
printf("%d\n",get_word_num(buf));
return0;
}
解析:橫線部分填:((*p>='a' && *p<='z')||(*p>='A' && *p<='Z'))&&(tag==1);
題目二
1/1 + 1/2 + 1/3 + 1/4 + ... 在數學上稱為調和級數。
它是發散的,也就是說,只要加上足夠多的項,就可以得到任意大的數字。
但是,它發散的很慢:
前1項和達到 1.0
前4項和才超過 2.0
前83項的和才超過 5.0
那麼,請你計算一下,要加多少項,才能使得和達到或超過 15.0 呢?
請填寫這個整數。
注意:只需要填寫一個整數,不要填寫任何多餘的內容。比如說明文字。
答案:1835421;
程式碼如下:
#include<stdio.h>
int main()
{
double i=1.0;
double sum=0.0;
int count=0;
for(;sum<=15.0;i++)
{
sum=sum+(1.0/i);
count++;
}
printf("%d\n",count);
return 0;
}
題目三
如果x的x次冪結果為10,你能計算出x的近似值嗎?
顯然,這個值是介於2和3之間的一個數字。
請把x的值計算到小數後6位(四捨五入),並填寫這個小數值。
注意:只填寫一個小數,不要寫任何多餘的符號或說明。
答案:2.506184
完整程式碼如下:
#include <cstdio>
#include <cmath>
int main()
{
double x=2.4;
for(;x<3;x+=0.00000001)
{
if(fabs((pow(x,x)-10.0))<0.000001)
{
printf("%.8lf\n",x);
}
}
return 0;
}
題目四
合數,指自然數中除了能被1和本身整除外,還能被其他的數整除(不包括0,1)的數。與之相對的是質數(因數只有1和它本身,如2,3,5,7,11,13等等,也稱素數)。
已知n=99999999是一個合數,那麼能被他整除的數有幾個(1和本身除外):
合數n=9999999,能被他整除的數又有幾個(1和本身除外):
程式碼如下:可以自己修改程式中n的值。
#include<stdio.h>
int main()
{
long long n=9999999;
int count=0;
for(int i=2;i<n;i++)
{
if(n%i==0)
{
count++;
printf("%d ",i);
}
}
printf("%d\n",count);
return 0;
}
題目五
從鍵盤上輸入一個整數n,要求計算n+nn+nnn+nnnn+nnnnn+......(共n項)的和,
例如n=5,
則計算5+55+555+5555+55555的結果
【資料格式】
輸入一個整數 n (0<n<10) 。
要求輸出一個整數,計算結果。
例如,輸入:
5
程式應該輸出:
61725
再例如,輸入:
3
程式應該輸出:
369
資源約定:
峰值記憶體消耗(含虛擬機器) < 256M
CPU消耗 < 1000ms
請嚴格按要求輸出,不要畫蛇添足地列印類似:“請您輸入...”的多餘內容。
所有程式碼放在同一個原始檔中,除錯通過後,拷貝提交該原始碼。
注意:不要使用package語句。不要使用jdk1.7及以上版本的特性。
注意:主類的名字必須是:Main,否則按無效程式碼處理。
完整程式碼如下:
#include<stdio.h>
int main()
{
int i=1,n;
long long sum1=0.0,sum2=0.0;
scanf("%d",&n);
for(sum2=sum1=n;i<n;i++)
{
sum1=sum1*10+n;
sum2+=sum1;
}
printf("%lld\n",sum2);
return 0;
}
讀者可以自行執行結果。
題目六
勾股定理,西方稱為畢達哥拉斯定理,它所對應的三角形現在稱為:直角三角形。
已知直角三角形的斜邊是某個整數,並且要求另外兩條邊也必須是整數。
求滿足這個條件的不同直角三角形的個數。
【資料格式】
輸入一個整數 n (0<n<10000000) 表示直角三角形斜邊的長度。
要求輸出一個整數,表示滿足條件的直角三角形個數。
例如,輸入:
5
程式應該輸出:
1
再例如,輸入:
100
程式應該輸出:
2
再例如,輸入:
3
程式應該輸出:
0
資源約定:
峰值記憶體消耗(含虛擬機器) < 256M
CPU消耗 < 1000ms
請嚴格按要求輸出,不要畫蛇添足地列印類似:“請您輸入...”的多餘內容。
所有程式碼放在同一個原始檔中,除錯通過後,拷貝提交該原始碼。
注意:不要使用package語句。不要使用jdk1.7及以上版本的特性。
注意:主類的名字必須是:Main,否則按無效程式碼處理。
完整程式碼如下:
#include<stdio.h>
#include<math.h>
int main()
{
int a,b,c,c2,b2,count=0;
scanf("%d",&c);
c2=c*c;
for(a=1;a<c/sqrt(2);a++)
{
b=sqrt(c2-a*a);
if((a*a+b*b)==c2)
{
count++;
}
}
printf("%d\n",count);
return 0;
}
題目七
輸出一個數字n,計算(0 - n)之間所有數字的全排列。
【資料格式】
輸入一個整數 n (0<n<10) 。
要求輸出(1 - n)之間所有數字的全排列,中間逗號分開。
例如,輸入:
3
程式應該輸出:
1,2,3
1,3,2
2,1,3
2,3,1
3,1,2
3,2,1
再例如,輸入:
2
程式應該輸出:
1,2
2,1
資源約定:
峰值記憶體消耗(含虛擬機器) < 256M
CPU消耗 < 1000ms
請嚴格按要求輸出,不要畫蛇添足地列印類似:“請您輸入...”的多餘內容。
所有程式碼放在同一個原始檔中,除錯通過後,拷貝提交該原始碼。
注意:不要使用package語句。不要使用jdk1.7及以上版本的特性。
注意:主類的名字必須是:Main,否則按無效程式碼處理。
第七題還真沒有想出什麼好的方法,先把部落格發表了後面再補上吧。
注:題目文件和源程式已經上傳到了CSDN的下載頁,下載地址在下面評論中。需要的同志可以自行下載。