1. 程式人生 > >藍橋杯 結果填空題 訓練 題目集(java)

藍橋杯 結果填空題 訓練 題目集(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/2

2.三人年齡

三個神祕蒙面人來訪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個問題(其編號為110),越後面越有難度。答對的,當前分數翻倍;答錯了則扣掉與題號相同的分數(選手必須回答問題,不回答按錯誤處理)。

每位選手都有一個起步的分數為10分。

某獲勝選手最終得分剛好是100分,如果不讓你看比賽過程,你能推斷出他(她)哪個題目答對了,哪個題目答錯了嗎?

如果把答對的記為1,答錯的記為0,則10個題目的回答情況可以用僅含有10的串來表示。例如: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);
		
	}
		
}

(待續)