蓝桥杯 结果填空题 训练 题目集(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);
		
	}
		
}



(待续)




  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值