藍橋杯 結果填空題 訓練 題目集(java)
(待續)
1---空瓶換汽水
2---三人年齡
3---考察團組成
4---微生物增殖
5---除去次方數
6---古堡算式
7---奇怪的比賽
8---尤拉與雞蛋
9---猜生日
10--棋盤上的麥子
11--國慶星期日
12--找素數
13--填寫算式
14--取字母組成串
(由於文章太長,所以可以用ctrl+F鍵來搜尋題目)
1.空瓶換汽水
浪費可恥,節約光榮。飲料店節日搞活動:不用付費,用3個某飲料的空瓶就可以換一瓶該飲料。剛好小明前兩天買了2瓶該飲料喝完了,瓶子還在。他耍了個小聰明,向老闆借了一個空瓶,湊成3個,換了一瓶該飲料,喝完還瓶!!
飲料店老闆一統計,已經售出該飲料且未還瓶的有12345瓶,那麼如果這些飲料的買主都如小明一樣聰明,老闆最多還需要送出多少瓶飲料呢?
顯然答案是個正整數。
結果:
6172
過程:
最多送飲料的情況就是一個人擁有12345個空瓶,然後每次都拿著兩個空瓶就去換酒,因為如果拿著三個瓶去換酒的話,你就會少三個空瓶,而前者你會少兩個空瓶。所以前者是最最優的。 12345/22.三人年齡
三個神祕蒙面人來訪F博士。
博士詢問他們年齡時,他們說:我們中年齡最小的不超過19歲。我們3人年齡總和為70歲。且我們三人年齡的乘積是所有可能情況中最大的。
請幫助F博士計算他們的年齡,從小到大排列,用逗號分開。
答案:
19 25 26
程式碼如下:
import java.util.Scanner; public class Main { public static void main(String[] args) { int max = 0; for(int i=10;i<70;i++){ for(int j=10;j<70;j++){ for(int k=10;k<70;k++){ if(i+j+k==70){ if(Math.min(i, Math.min(j, k))<=19){ if(i*j*k>max){ max=i*j*k; System.out.println(i+" "+j+" "+k); } } } } } } } }
3.考察團組成
某飯店招待國外考察團。按照標準,對領導是400元/人,隨團職員200元/人,對司機50元/人。
考察團共36人,招待費結算為3600元,請問領導、職員、司機各幾人。
答案是三個整數,用逗號分隔。
答案:
3,5,28
程式碼如下:
import java.util.Scanner; public class Main { public static void main(String[] args) { for(int i=1;i<=36;i++){ for(int j=1;j<=36;j++){ for(int k=1;k<=36;k++){ if(i*400+j*200+k*50==3600 && i+j+k==36){ System.out.print(i+","+j+","+k); System.out.println(); } } } } } }
4.微生物增殖
假設有兩種微生物 X 和 Y
X出生後每隔3分鐘分裂一次(數目加倍),Y出生後每隔2分鐘分裂一次(數目加倍)。
一個新出生的X,半分鐘之後吃掉1個Y,並且,從此開始,每隔1分鐘吃1個Y。
現在已知有新出生的 X=10, Y=89,求60分鐘後Y的數目。
如果X=10,Y=90 呢?
本題的要求就是寫出這兩種初始條件下,60分鐘後Y的數目。
題目的結果令你震驚嗎?這不是簡單的數字遊戲!真實的生物圈有著同樣脆弱的性質!
結果:
0(結果為負數,則吃光了,為0)
94371840
思路:
不用管X是半分鐘吃一個Y還是一分鐘吃一個Y,都可以算成一分鐘吃一個Y,比如一個新出生的X,它在0.5分鐘的時候吃了一個Y,在第1.5分鐘吃一個,2.5分鐘又吃了一個,也就是說,三分鐘內,X吃了3個Y。
程式碼如下:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int x = 10,y=89;
for(int i=1;i<=120;i++){//把i++換算0.5秒
if(i%2==1){//都可以算成一分鐘吃一個Y
y-=x;
}
if(i%4==0){
y*=2;
}
if(i%6==0){
x*=2;
}
}
System.out.println(y);
}
}
5.除去次方數
自然數的平方數是:1 4 9 16 25 …
自然數的立方數是:1 8 27 64 125 …
自然數的4次方數是:1 16 81256 …
…
這些數字都可以稱為次方數。
1~10000中,去掉所有的次方數,還剩下多少個數字?
結果:
9875
思路:
因為從平方開始,所以數值最大100,而2^14=16384,所以次方最大到14就行。(節省時間)
程式碼如下:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int[] arr = new int[10001];
for(int i=1;i<=100;i++){
for(int j=2;j<=14;j++){
if(Math.pow(i, j)<=10000){
int a1 = (int)Math.pow(i, j);
arr[a1]=1;
}
}
}
int sum = 0;
for(int i=1;i<=10000;i++){
if(arr[i]==1)
sum++;
}
System.out.println(10000-sum);
}
}
6.古堡算式
福爾摩斯到某古堡探險,看到門上寫著一個奇怪的算式:
ABCDE * ? = EDCBA
他對華生說:“ABCDE應該代表不同的數字,問號也代表某個數字!”
華生:“我猜也是!”
於是,兩人沉默了好久,還是沒有算出合適的結果來。
請你利用計算機的優勢,找到破解的答案。
把 ABCDE 所代表的數字寫出來。
答案寫在“解答.txt”中,不要寫在這裡!
結果:
2 1 9 7 8
程式碼如下:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
for(int i=0;i<=9;i++){
for(int j=0;j<=9;j++){
for(int k=0;k<=9;k++){
for(int l=0;l<=9;l++){
for(int m=0;m<=9;m++){
for(int x=0;x<=9;x++){
if(i!=j && i!=k && i!=l && i!=m &&
j!=k && j!=l && j!=m &&
k!=l && k!=m &&
l!=m){
int lef = i*10000+j*1000+k*100+l*10+m;
int right = m*10000+l*1000+k*100+j*10+i;
if(lef*x==right)
System.out.println(i+" "+j+" "+k+" "+l+" "+m);
}
}
}
}
}
}
}
}
}
7.奇怪的比賽
某電視臺舉辦了低碳生活大獎賽。題目的計分規則相當奇怪:
每位選手需要回答10個問題(其編號為1到10),越後面越有難度。答對的,當前分數翻倍;答錯了則扣掉與題號相同的分數(選手必須回答問題,不回答按錯誤處理)。
每位選手都有一個起步的分數為10分。
某獲勝選手最終得分剛好是100分,如果不讓你看比賽過程,你能推斷出他(她)哪個題目答對了,哪個題目答錯了嗎?
如果把答對的記為1,答錯的記為0,則10個題目的回答情況可以用僅含有1和0的串來表示。例如:0010110011 就是可能的情況。
你的任務是算出所有可能情況。每個答案佔一行。
多個答案順序不重要。
答案寫在“解答.txt”中,不要寫在這裡!
結果:
0010110011
0111010000
1011010000
程式碼如下:
import java.awt.Checkbox;
import java.util.Scanner;
public class Main{
public static void main(String[] args){
int init = 10;
for(int a=0;a<=1;a++){
for(int b=0;b<=1;b++){
for(int c=0;c<=1;c++){
for(int d=0;d<=1;d++){
for(int e=0;e<=1;e++){
for(int f=0;f<=1;f++){
for(int g=0;g<=1;g++){
for(int h=0;h<=1;h++){
for(int i=0;i<=1;i++){
for(int j=0;j<=1;j++){
String string=""+a;
string+=b;
string+=c;
string+=d;
string+=e;
string+=f;
string+=g;
string+=h;
string+=i;
string+=j;
check(string);
}
}
}
}
}
}
}
}
}
}
}
public static void check(String string){
int init = 10;
for(int i=0;i<string.length();i++){
if(string.charAt(i)=='1'){
init*=2;
}
if(string.charAt(i)=='0'){
init-=(i+1);
}
}
if(init==100)
System.out.println(string);
}
}
8.尤拉與雞蛋
大數學家尤拉在集市上遇到了本村的兩個農婦,每人跨著個空籃子。她們和尤拉打招呼說兩人剛剛賣完了所有的雞蛋。
尤拉隨便問:“賣了多少雞蛋呢?”
不料一個說:“我們兩人自己賣自己的,一共賣了150個雞蛋,雖然我們賣的雞蛋有多有少,但剛好得了同樣的錢數。你猜猜看!”
尤拉猜不出。
另一個補充道:“如果我按她那樣的價格賣,可以得到32元;如果她按我的價格賣,可以得到24.5元”。
尤拉想了想,說出了正確答案。
我們不是數學家,懶得列出公式來分析。但計算機可以“暴力破解”,就是把所有可能情況都試驗一遍,撞上為止!
請寫出每人雞蛋的數目(順序不限),用逗號隔開。
答案寫在“解答.txt”中,不要寫在這裡!結果:
80 70
程式碼如下:
import java.util.Scanner;
public class Main{
public static void main(String[] args){
int b = 0;//b的個數
double bprice=0;
double aprice=0;
for(int a=1;a<150;a++){//a的個數
b=150-a;
bprice=32.0/a;//b的單價
aprice=24.5/b;//a的單價
if(a*aprice==b*bprice){
System.out.println(a+" "+b);
}
}
}
}
9.猜生日
今年的植樹節(2012年3月12日),小明和他的叔叔還有小夥伴們一起去植樹。休息的時候,小明的同學問他叔叔多大年紀,他叔叔說:“我說個題目,看你們誰先猜出來!”
“把我出生的年月日連起來拼成一個8位數(月、日不足兩位前補0)正好可以被今天的年、月、日整除!”
他想了想,又補充到:“再給個提示,我是6月出生的。”
根據這些資訊,請你幫小明算一下,他叔叔的出生年月日。
答案寫在“解答.txt”中,不要寫在這裡!
格式是年月日連成的8位數。
例如,如果是1948年6月12日,就寫:19480612
結果:
19230696(日小於等於30,剔除)
19550604
19900692(日小於等於30,剔除)
程式碼如下:
import java.util.Scanner;
public class Main{
public static void main(String[] args){
for(int i=19120000;i<20000000;i++){
if(i%2012==0 && i%3==0 && i%12==0){
if(i/100%10==6 && i/1000%10==0){
System.out.println(i);
}
}
}
}
}
10.棋盤上的麥子
你一定聽說過這個故事。國王對發明國際象棋的大臣很佩服,問他要什麼報酬,大臣說:請在第1個棋盤格放1粒麥子,在第2個棋盤格放2粒麥子,在第3個棋盤格放4粒麥子,在第4個棋盤格放8粒麥子,......後一格的數字是前一格的兩倍,直到放完所有棋盤格(國際象棋共有64格)。
國王以為他只是想要一袋麥子而已,哈哈大笑。
當時的條件下無法準確計算,但估算結果令人吃驚:即使全世界都鋪滿麥子也不夠用!
請你藉助計算機準確地計算,到底需要多少粒麥子。
答案寫在“解答.txt”中,不要寫在這裡!
答案:
18446744073709551615
程式碼如下:
import java.math.BigInteger;
import java.util.Scanner;
public class Main{
public static void main(String[] args){
BigInteger sum = new BigInteger("0");
BigInteger js = new BigInteger("2");
for(int i=0;i<64;i++){
BigInteger val = js.pow(i);
sum=sum.add(val);
}
System.out.println(sum);
}
}
11.國慶星期日
1949年的國慶節(10月1日)是星期六。
今年(2012)的國慶節是星期一。
那麼,從建國到現在,有幾次國慶節正好是星期日呢?
只要答案,不限手段!
可以用windows日曆,windows計算器,Excel公式,。。。。。
當然,也可以程式設計!
不要求寫出具體是哪些年,只要一個數目!
千萬不要提交原始碼!
答案不要寫在這裡,寫在“解答.txt”中
答案:
9
程式碼如下:import java.util.Scanner;
public class Main{
public static void main(String[] args){
int counter=0;//計算器
int a = 6;
for(int year=1950;year<=2012;year++){
if(isleapyear(year)){
a+=2;
}else{
a+=1;
}
if(a%7==0){
counter++;
}
}
System.out.println(counter);
}
//判斷是否為閏年
private static boolean isleapyear(int year){
return (year%400==0||(year%4==0&&year%100!=0));
}
}
12.找素數
素數就是不能再進行等分的整數。比如:7,11。而9不是素數,因為它可以平分為3等份。一般認為最小的素數是2,接著是3,5,...
請問,第100002(十萬零二)個素數是多少?
請注意:“2”是第一素數,“3” 是第二個素數,依此類推。
不需要提交原始碼,只要寫出準確的結果即可!
答案寫在:“解答.txt”中,不要寫在這裡。
結果:
1299743
程式碼如下:
import java.util.Scanner;
public class Main{
public static void main(String[] args){
int count = 0;
for(int i=2;i<100000000;i++){
if(su(i)){
count++;
}
if(count==100002){
System.out.println(i);
break;
}
}
}
private static boolean su(int i){
if(i==1&&i==0){
return false;
}
for(int j=2;j*j<=i;j++){
if(i%j==0){
return false;
}
}
return true;
}
}
13.填寫算式
看這個算式:
☆☆☆ + ☆☆☆ = ☆☆☆
如果每個五角星代表 1 ~ 9 的不同的數字。
這個算式有多少種可能的正確填寫方法?
173 + 286 = 459
295 + 173 = 468
173 + 295 = 468
183 + 492 = 675
以上都是正確的填寫法!
注意:
111 + 222 = 333 是錯誤的填寫法!
因為每個數字必須是不同的!
也就是說:1~9中的所有數字,每個必須出現且僅出現一次!
注意:
不包括數字“0”!
注意:
滿足加法交換率的式子算兩種不同的答案。
所以答案肯定是個偶數!
注意:
只要求計算不同的填法的數目
不要求列出所有填寫法
更不要求填寫原始碼!
答案不要寫在這裡,請寫在“解答.txt”中!
結果:
336
程式碼如下:
import java.util.Scanner;
public class Main{
public static void main(String[] args){
int cnt = 0;
for(int a=1;a<=9;a++){
for(int b=1;b<=9;b++){
for(int c=1;c<=9;c++){
for(int d=1;d<=9;d++){
for(int e=1;e<=9;e++){
for(int f=1;f<=9;f++){
for(int g=1;g<=9;g++){
for(int h=1;h<=9;h++){
for(int i=1;i<=9;i++){
if(a!=b && a!=c && a!=d && a!=e && a!=f && a!=g && a!=h && a!=i &&
b!=c && b!=d && b!=e && b!=f && b!=g && b!=h && b!=i &&
c!=d && c!=e && c!=f && c!=g && c!=h && c!=i &&
d!=e && d!=f && d!=g && d!=h && d!=i &&
e!=f && e!=g && e!=h && e!=i &&
f!=g && f!=h && f!=i &&
g!=h && g!=i &&
h!=i){
if(a!=0 && d!=0 && g!=0){
if((a*100+b*10+c)+(d*100+e*10+f)==(g*100+h*10+i)){
cnt++;
}
}
}
}
}
}
}
}
}
}
}
}
System.out.println(cnt);
}
}
14.取字母組成串
A B C D中取5次,每個字母都可以重複取出,形成一個串。
現在要求,串中A出現的次數必須為偶數(0次也算偶數)。
求可以形成多少種可能的串。
結果:
528
程式碼如下:
import java.util.Scanner;
public class Main{
public static void main(String[] args){
char[] a={'A','B','C','D'};
int total=0,ans=0;
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
for(int k=0;k<4;k++){
for(int m=0;m<4;m++){
for(int n=0;n<4;n++){
if(a[i]=='A')
ans++;
if(a[j]=='A')
ans++;
if(a[k]=='A')
ans++;
if(a[m]=='A')
ans++;
if(a[n]=='A')
ans++;
if(ans%2==0)
total++;
ans=0;
}
}
}
}
}
System.out.println(total);
}
}
(待續)