15年蓝桥杯javaB组

1.三角形面积

如图1所示。图中的所有小方格面积都是1。
那么,图中的三角形面积应该是多少呢?
请填写三角形的面积。不要填写任何多余内容或说明性文字	

在这里插入图片描述
答案为:28
思路:看成一个正方形减去3个三角形即可,64-8-12-16=28
在这里插入图片描述

2.立方变自身

观察下面的现象,某个数字的立方,按位累加仍然等于自身。
1^3 = 1 
8^3  = 512    5+1+2=8
17^3 = 4913   4+9+1+3=17
请你计算包括1,8,17在内,符合这个性质的正整数一共有多少个?

答案为:6


public class Main {
	public static void main(String[] args) {
		int count=0;
		for(int i=1;i<10000;i++) {
			int rs  = i*i*i;
			int temp =rs;
			int num=0;
			while(true) {
				if(temp==0) {
					break;
				}
				num = num+temp%10;
				temp = temp/10;		
			}
			if(num==i) {
				System.out.println("i="+i+"  按位累加="+num+"  立方="+rs);
				count++;
			}
		}
		System.out.println(count);
	}
}

3.三羊献瑞

观察下面的加法算式:
       祥 瑞 生 辉
  +   三 羊 献 瑞
----------------------------
    三 羊 生 瑞 气
其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。
请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。

答案为:1085


public class Main {
	public static void main(String[] args) {
	    	//祥 瑞 生 辉
		    //三 羊 献 瑞
		 //三 羊 生 瑞 气
		
//			  a b c d
//			  e f g b
//		  	e f c b h
		for(int a=0;a<10;a++) {
			for(int b=0;b<10;b++) {
				if(b!=a)
				for(int c=0;c<10;c++) {
					if(c!=a&&c!=b)
					for(int d=0;d<10;d++) {
						if(d!=a&&d!=b&&d!=c)
						for(int e=0;e<10;e++) {
							if(e!=a&&e!=b&&e!=c&&e!=d)
							for(int f=0;f<10;f++) {
								if(f!=a&&f!=b&&f!=c&&f!=d&&f!=e)
								for(int g=0;g<10;g++) {
									if(g!=a&&g!=b&&g!=c&&g!=d&&g!=e&&g!=f) {
										for(int h=0;h<10;h++) {
											if(h!=a&&h!=b&&h!=c&&h!=d&&h!=e&&h!=f&&h!=g) {
												int m = a*1000+b*100+c*10+d;
												int n = e*1000+f*100+g*10+b;
												int rs = e*10000+f*1000+c*100+b*10+h;							
												if(m+n==rs) {
													if(e!=0)
													System.out.println(""+e+f+g+b);								
												}	
											}
										}	
									}
								}
							}
						}
					}
				}
			}
		}
	}

4.循环节长度

两个整数做除法,有时会产生循环小数,其循环部分称为:循环节。
比如,11/13=6=>0.846153846153..... 其循环节为[846153] 共有6位。
下面的方法,可以求出循环节的长度。
请仔细阅读代码,并填写划线部分缺少的代码。
public static int f(int n, int m)
	{
		n = n % m;	
		Vector v = new Vector();
		
		for(;;)
		{
			v.add(n);
			n *= 10;
			n = n % m;
			if(n==0) return 0;
			if(v.indexOf(n)>=0)  _________________________________ ;  //填空
		}
	}

补充后为

public static int f(int n, int m)
	{
		n = n % m;	
		Vector v = new Vector();
		
		for(;;)
		{
			v.add(n);
			n *= 10;
			n = n % m;
			if(n==0) return 0;
			if(v.indexOf(n)>=0) return v.size();  //填空
		}
	}

5.九数组分数

1,2,3...9 这九个数字组成一个分数,其值恰好为1/3,如何组法?
下面的程序实现了该功能,请填写划线部分缺失的代码。
public class Main
{
	public static void test(int[] x)
	{
		int a = x[0]*1000 + x[1]*100 + x[2]*10 + x[3];
		int b = x[4]*10000 + x[5]*1000 + x[6]*100 + x[7]*10 + x[8];		
		if(a*3==b) System.out.println(a + " " + b);
	}
	
	public static void f(int[] x, int k)
	{
		if(k>=x.length){
			test(x);
			return;
		}
		
		for(int i=k; i<x.length; i++){
			{int t=x[k]; x[k]=x[i]; x[i]=t;}
			f(x,k+1);
			_______________________________________       // 填空
			
		}
	}
	
	public static void main(String[] args)
	{
		int[] x = {1,2,3,4,5,6,7,8,9};		
		f(x,0);
	}
}

补充完整为:

public class Main
{
	public static void test(int[] x)
	{
		int a = x[0]*1000 + x[1]*100 + x[2]*10 + x[3];
		int b = x[4]*10000 + x[5]*1000 + x[6]*100 + x[7]*10 + x[8];		
		if(a*3==b) System.out.println(a + " " + b);
	}
	
	public static void f(int[] x, int k)
	{
		if(k>=x.length){
			test(x);
			return;
		}
		
		for(int i=k; i<x.length; i++){
			{int t=x[k]; x[k]=x[i]; x[i]=t;}
			f(x,k+1);
			{int t=x[k]; x[k]=x[i]; x[i]=t;}       // 填空
			
		}
	}
	
	public static void main(String[] args)
	{
		int[] x = {1,2,3,4,5,6,7,8,9};		
		f(x,0);
	}
}

6.加法变乘法

我们都知道:1+2+3+ ... + 49 = 1225
现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015
比如:
1+2+3+...+10*11+12+...+27*28+29+...+49 = 2015
就是符合要求的答案。
请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交10)
注意:需要你提交的是一个整数,不要填写任何多余的内容。

答案是:16,运行下列代码即可得出结果

public class Main{
		public static void main(String[] args)
		{
			int[] num = new int[49];
			for(int i=0;i<49;i++) {
				num[i] =i+1;
			}
			
			
			for(int i=1;i<49;i++) {
				int left_1 = num[i-1];
				int right_1 = num[i];
				
				for(int j=1;j<49;j++) {
					int sum=0;
					if(j==i-1||j==i||j==i+1) {
						continue;
					}
					int left_2 = num[j-1];
					int right_2 = num[j];
					
					for(int k=0;k<num.length;k++) {
						if(k!=i && k!=i-1&&k!=j && k!=j-1) {
							sum = sum +num[k];
						}
					}
					if(sum+left_1*right_1+left_2*right_2==2015) {
						if(left_1<=left_2) {
							System.out.println(left_1);
						}else {
							System.out.println(left_2);
						}
					}
				}
			}
		}
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值