蓝桥杯java历年真题及答案整理(共129道题目及答案)(6)

2018-12-23 23:59

for(int i=0;i<10;i++){ sum = sum.add(

pw[i].multiply(BigInteger.valueOf(nn[i]))); }

String s = \

if(s.length()!=21) return; // 确定各数字出现的多少次 int[] nn2 = new int[10]; for(int i=0;i<21;i++){ nn2[s.charAt(i)-'0']++; }

for(int i=0;i<10;i++){

if(nn[i]!=nn2[i]) return; }

System.out.println(s); }

public static void f(BigInteger[] pw, int[] nn, int cur, int use){ if(cur==9){

nn[9] = 21 - use; ji_suan(pw,nn); return; }

// 对当前位置所有可能进行枚举 for(int i=0;i<21-use;i++){ nn[cur] = i;

f(pw,nn,cur+1,use+i); }

}

public static void main(String[] args){

long startTime = System.currentTimeMillis(); // 程序开始时间 BigInteger pw[] = new BigInteger[10]; for(int i=0;i

int nn[] = new int[10]; f(pw,nn,0,0);

System.out.println(\

long endTime = System.currentTimeMillis(); // 程序结束时间

System.out.println((endTime-startTime)/1000f+\秒\ // 运行总时间 } }

运行结果:

128468643043731391252 449177399146038697307 OK

27.343秒

26

方法三:

import java.math.BigInteger; import java.util.Arrays;

/**

* 如题,求解21位花朵数的解法,要求在3分钟之内计算完成花朵数: N位整数,它等于各个位的数字的N次方之和, *

* 例如有一个N位数字,a1a2a3a4.....aN = a1^N +a2^N+......aN^N *

* @author hb */

public class FlowerNum {

private static int num = 21;

private static BigInteger[] table = new BigInteger[10]; private static int[] nums; private static int[] a=new int[10];

public static void main(String[] args) {

long time = System.currentTimeMillis(); for (int i = 0; i < 10; i++)

table[i] = BigInteger.valueOf(i).pow(num); nums = new int[num]; find(nums, 0, 0); //f();

time = System.currentTimeMillis() - time; System.out.println(time / 1000.0 + \ }

/**

* level表示第几位数,num表示第几位数的数字; */

public static void find(int[] nums, int level, int num) {

nums[level] = num;

if (level == nums.length - 1) {

BigInteger big = sum(nums);//当level为20时,表示nums数组下标为20即21位数字满后求和; int[] temp = getArray(big);//将得到的21位数和转化为整形数组;并返回; if (check(nums, temp))//测试是否是21位,并将数组复制给nums数组; System.out.println(big);//输出big数; return; }

for (int i =num; i < 10; i++)//递归;查找21位数字符合条件的数; find(nums, level + 1, i); }

/**

* 检测长度,若符合条件就复制a2到a1; * @param a1 * @param a2 * @return

27

*/

public static boolean check(int[] a1, int[] a2) { if (a1.length != a2.length) return false;

//Arrays.sort(Arrays.copyOf(a1, a1.length)); Arrays.sort(a1); Arrays.sort(a2);

return Arrays.equals(a1, a2); } /**

* 得到nums数组的数做为table下标的数的和。并返回; * @param nums * @return */

public static BigInteger sum(int[] nums) { BigInteger sum = BigInteger.ZERO; for (int i = 0; i < nums.length; i++) sum = sum.add(table[nums[i]]); return sum; } /**

* 将BigInteger转化为int[]类型数据; * @param big * @return */

public static int[] getArray(BigInteger big) { String s = String.valueOf(big); char[] ch = s.toCharArray(); int[] res = new int[ch.length]; for (int i = 0; i < ch.length; i++) res[i] = ch[i] - '0'; return res; }

public static void f(){ for(a[0]=0;a[0]<=21;a[0]++){

for(a[1]=0;a[1]<=21-a[0];a[1]++){ for(a[2]=0;a[2]<=21-a[0]-a[1];a[2]++){ for(a[3]=0;a[3]<=21-a[0]-a[1]-a[2];a[3]++){ for(a[4]=0;a[4]<=21-a[0]-a[1]-a[2]-a[3];a[4]++){

for(a[5]=0;a[5]<=21-a[0]-a[1]-a[2]-a[3]-a[4];a[5]++){ for(a[6]=0;a[6]<=21-a[0]-a[1]-a[2]-a[3]-a[4]-a[5];a[6]++){

for(a[7]=0;a[7]<=21-a[0]-a[1]-a[2]-a[3]-a[4]-a[5]-a[6];a[7]++){ for(a[8]=0;a[8]<=21-a[0]-a[1]-a[2]-a[3]-a[4]-a[5]-a[6]-a[7];a[8]++){ a[9]=21-a[0]-a[1]-a[2]-a[3]-a[4]-a[5]-a[6]-a[7]-a[8];

BigInteger sum=BigInteger.ZERO; for(int i=0;i<10;i++){

28

BigInteger(String.valueOf(a[i]))));

}

}

}

}

}

}

sum=sum.add(table[i].multiply(new

}

if(String .valueOf(sum).length()==21){ }

String str=sum.toString(); int b[]=new int[10];

for(int index=0;index

boolean f=true; int i=0; for(;;){ if(i==10)break;

if(b[i]!=a[i]){f=false;break;} i++;

int flag=str.charAt(index)-'0';

b[flag]+=1;

}

if(f)System.out.println(sum.toString());

} }

}

} }

11.猜生日

今年的植树节(2012年3月12日),小明和他的叔叔还有小伙伴们一起去植树。

休息的时候,小明的同学问他叔叔多大年纪,他叔叔说:“我说个题目,看你们谁先猜出来!”

“把我出生的年月日连起来拼成一个8位数(月、日不足两位前补0)正好可以被今天的年、月、日整除!” 他想了想,又补充到:“再给个提示,我是6月出生的。” 根据这些信息,请你帮小明算一下,他叔叔的出生年月日。 答案写在“解答.txt”中,不要写在这里! 格式是年月日连成的8位数。

例如,如果是1948年6月12日,就写:19480612

package Question10_19; publicclass Question11 {

publicstaticvoid main(String[] args) {

for (int i = 20120312; ; i--) {

String s=\+i;

intyear=Integer.parseInt(s.substring(0, 4));

29

}

}

}

int month=Integer.parseInt(s.substring(4, 6)); int day=Integer.parseInt(s.substring(6, 8));

System.out.println(year+\ if(day==0||day>31){ }

if(!(i 12==0&&i%3==0&&i==0)){ }

if(month!=6){ }

System.out.println(i); break;

continue; continue; continue;

//

运行结果: 19550604

方法二:

public class Demo02 {

public static void main(String[] args){ int n = 20120312;

String s = \

for(int i=19000601;i<=20130312;i++){

s = \

int d = Integer.parseInt(s.substring(6)); // 得到天 int m = Integer.parseInt(s.substring(4,6)); // 得到月 if(d==0) continue;

if(d>=1&&d<31&&m==6&&i 12==0&&i%3==0&&i==0){ System.out.println(i); } } } }

运行结果: 19550604

12.填算式

看这个算式:

☆☆☆ + ☆☆☆ = ☆☆☆

如果每个五角星代表 1 ~ 9 的不同的数字。 这个算式有多少种可能的正确填写方法?

30


蓝桥杯java历年真题及答案整理(共129道题目及答案)(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:《素质教育专题》第04章在线测试

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: