list.add(\list.add(\
list.add(\
ArrayList
out.add(list.get(0)); list.remove(0); out.add(out.get(0)); out.remove(0);
}
int i=out.size()-1; while(i>0){ }
System.out.print(out.get(i--)+\
System.out.print(out.get(0)); } }
方法三:
import java.util.Arrays; import java.util.List; import java.util.Vector; public class Demo05 {
public static List moveCard(List src) { if (src == null) return null;
List dst = new Vector(); for (;;) {
if (src.size()==0)
break; // 填空 src.add(src.remove(0));
dst.add(src.remove(0)); // 填空 }
return dst;
}
public static void main(String[] args) { List a = new Vector();
a.addAll(Arrays.asList(\ \ System.out.println(moveCard(a)); } }
运行结果:
[2, 4, 6, 8, 10, Q, A, 5, 9, K, 7, 3, J]
21
8.第一个数字(数字的值返回)
以下的静态方法实现了:把串s中第一个出现的数字的值返回。 如果找不到数字,返回-1 例如:
s = \ 则返回2 s = \ 则返回8 s = \ 则返回-1
以下的静态方法实现了:把串s中第一个出现的数字的值返回。 请分析代码逻辑,并推测划线处的代码。 答案写在“解答.txt”文件中
注意:只写划线处应该填的内容,划线前后的内容不要抄写。
publicclassDemo04 { }
publicstaticint getFirstNum(String s) { }
publicstaticvoid main(String[] args) { }
String s1 = \; //则返回2 String s2 = \; //则返回8 String s3 = \; //则返回-1
System.out.println(getFirstNum(s1)); System.out.println(getFirstNum(s2)); System.out.println(getFirstNum(s3)); if (s == null || s.length() == 0)
return -1;
char c = s.charAt(0); if (c >= '0'&& c <= '9')
return s.charAt(0)-'0'; // 填空
returngetFirstNum(s.substring(1)); // 填空
运行结果:
2 8 -1
9.放麦子
你一定听说过这个故事。国王对发明国际象棋的大臣很佩服, 问他要什么报酬,大臣说:请在第1个棋盘格放1粒麦子, 在第2个棋盘格放2粒麦子,在第3个棋盘格放4粒麦子, 在第4个棋盘格放8粒麦子,......后一格的数字是前一格的两倍, 直到放完所有棋盘格(国际象棋共有64格)。 国王以为他只是想要一袋麦子而已,哈哈大笑。
当时的条件下无法准确计算,但估算结果令人吃惊:即使全世界都铺满麦子也不够用!
22
请你借助计算机准确地计算,到底需要多少粒麦子。 答案写在“解答.txt”中,不要写在这里!
package Question1_9;
import java.math.BigInteger; publicclass Question9 { }
publicstaticvoid main(String[] args) { }
BigInteger total=new BigInteger(\); BigInteger base=new BigInteger(\); for (int i = 0; i < 64; i++) { }
System.out.println(total);
System.out.println(base.pow(64).add(new BigInteger(\)));
total=total.add(base.pow(i)); //System.out.println(total);
运行结果:
18446744073709551614
方法二:
import java.math.BigInteger;
public class Demo03 {
public static void main(String[] args) { BigInteger bi = new BigInteger(\
for(int i=0;i<64;i++){
bi = bi.add(BigInteger.valueOf((long)(Math.pow(2, i)))); }
System.out.println(bi); } }
10.求21位数的水仙花数
package Question10_19; import java.math.BigInteger; import java.util.Scanner;
class Question10Think2OptimizeMustRemember {
public static int size;
public static int array[]={0,1,2,3,4,5,6,7,8,9};
public static BigInteger powArray[] = new BigInteger[10]; // 记录0~9的size次方 public static int usedTimes[]=new int[10];// 记录0~9的使用次数
public static BigInteger iPowSizeMultiplyj[][]; //记录0到9中任意数字i的N次方乘以i出现的次public static BigInteger MAX; // size位的数字能表示的最大值 public static BigInteger MIN; // size位的数字能表示的最小值
23
数j的结果(i^N*j)
public static void init() {// 用于初始化powArray[],MAX,MIN }
public static void exhaustion(int arrayIndex,int used,BigInteger current) {
if (current.compareTo(MAX)>1) {//超过最大值,递归结束 }
if(used==size){//size位全部分配完毕 }
if(arrayIndex==0){ }
if(current.add(iPowSizeMultiplyj[arrayIndex][size-used]).compareTo(MIN)<0){ }
24
for (int i = 0; i < 10; i++) {// 初始化powArray[] }
MIN = (new BigInteger(\初始化最小值
MAX = (new BigInteger(\初始化最大值 iPowSizeMultiplyj=new BigInteger[10][size+1]; //初始化iPowSizeMultiplyj[][] for (int i = 0; i < 10; i++) { }
iPowSizeMultiplyj[i][0]=BigInteger.valueOf(0); for (int j = 1; j < size+1; j++) { }
iPowSizeMultiplyj[i][j]=iPowSizeMultiplyj[i][j-1].add(powArray[i]); powArray[i] = (new BigInteger(\
return;
if(current.compareTo(MIN)<0){ //已获得的值小于最小值 }
return;
String s=current+\
int avaliableValueUsed[]=new int[10]; for (int i = 0; i < s.length(); i++) { }
for (int i = 0; i < 10; i++) { }
System.out.println(current); return;
if(usedTimes[i]!=avaliableValueUsed[i]){ }
return;
avaliableValueUsed[s.charAt(i)-'0']++;
}else {
usedTimes[0]=size-used;
exhaustion(-1, size, current); usedTimes[0]=0; return;
return;
}
if(arrayIndex>=0){ }
for (int i = 0; i <= size-used; i++) { }
return;//1到9已分配完毕,不可再延伸了
if(current.add(iPowSizeMultiplyj[arrayIndex][i]).compareTo(MAX)>0){ }
usedTimes[arrayIndex]=i; exhaustion(arrayIndex-1, usedTimes[arrayIndex]=0;
return;
used+i,current.add(iPowSizeMultiplyj[arrayIndex][i]));
}else {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in); Question10Think2.size = scanner.nextInt();
long startTime = System.currentTimeMillis(); // 程序开始时间 Question10Think2OptimizeMustRemember.size=21; Question10Think2OptimizeMustRemember.init();
Question10Think2OptimizeMustRemember.exhaustion(9, 0, BigInteger.valueOf(0));
long endTime = System.currentTimeMillis();
// 程序结束时间
System.out.println((endTime-startTime)/1000f+\秒\// 运行总时
// // }
}
运行结果:
128468643043731391252 449177399146038697307
19.062秒
方法二:
/*
* 求21位数的水仙花数 */
import java.math.BigInteger;
public class Demo01_BigInteger { // 求 每个 i 的 21 次方 public static BigInteger p(int i){
BigInteger base = BigInteger.valueOf(i); return base.pow(21); }
public static void ji_suan(BigInteger[] pw,int[] nn){ BigInteger sum = BigInteger.ZERO;
25