编程题
1. 某人年龄的立方是4位数,年龄的四次方是6位数,这10位数包含0到9,每个恰好出现一次,求他年龄多大
public class One { public static void main(String[] args) { for (int i = 10; i < 100; i++) { int i1 = i*i*i; int i2 = i1*i; String s1 = i1+""; String s2 = i2+""; if(s1.length()==4&&s2.length()==6&&check(s1+s2)) { System.out.println(i); break; } } } //验证十位包含0到9 private static boolean check(String s) { //去重 Set<Character> set = new HashSet<Character>(); for(int i=0;i<s.length();i++) { set.add(s.charAt(i)); } return set.size()==10; } }
2. 1 9 4 9四位数随意摆放它们的先后顺序,能组成多少个4位的素数
//重复数据的全排列+检查 public class One{ static void f(int[] arr, int k) { if (k == 4)// 前面的已经确定,k为数组下标 check(arr); for (int i = k; i < 4; i++) { // 交换 int t = arr[k]; arr[k] = arr[i]; arr[i] = t; // 递归调用 f(arr, k + 1); // 交换回来 t = arr[k]; arr[k] = arr[i]; arr[i] = t; } } // 去重 static Set<Integer> set = new HashSet<Integer>(); // 验证十位数包含0到9 private static void check(int[] arr) { // TODO Auto-generated method stub boolean flag = true; int x = arr[0] * 1000 + arr[1] * 100 + arr[2] * 10 + arr[3]; for (int i = 2; i <= Math.sqrt(x); i++) { // 被二整除不是素数 if (x % i == 0) { flag = false; break; } } // 素数添加到集合中 if (flag) { set.add(x); } } public static void main(String[] args) { int arr[] = { 1, 9, 4, 9 }; f(arr, 0); System.out.println(set.size()); } }
3. 假设 a b c d e 代表1-9不同的5个数字(注意是各不相同的数字,且不含0),能满足 ab * cde = adb * ce 这样的算式一共多少种?
public class One { public static void main(String[] args) { int count = 0; //a,b,c,d,e都不等于零且它们不相等 for (int a = 1; a < 10; a++) { for (int b = 1; b < 10; b++) { if (b != a) { for (int c = 1; c < 10; c++) { if (c != a && c != b) { for (int d = 1; d < 10; d++) { if (d != a && d != b && d != c) { for (int e = 1; e < 10; e++) { if (e != a && e != b && e != c && e != d) { if ((a * 10 + b) * (c * 100 + d * 10 + e) == (a * 100 + d * 10 + b) * (c * 10 + e)) { count++; System.out.printf( "(%d*10+%d)*(%d*100+%d*10+%d)==(%d*100+%d*10+%d)*(%d*10+%d)==%d\n", a, b, c, d, e, a, d, b, c, e, (a * 100 + d * 10 + b) * (c * 10 + e)); } } } } } } } } } } System.out.println(count); } }
4.三十九层台阶一共走偶数步,在只能迈上1个或2个台阶的条件下一共要多少种走法?
public class One5{ public static void main(String[] args) { f(39,0); System.out.println(count); } /** * * @param i 剩下的台阶数 * @param j 已走的台阶数 */ static int count; private static void f(int i, int j) { // TODO Auto-generated method stub if(i<0) { return; } if(i == 0) {//39层台阶全走完 if(j%2==0) { count++; } return; } f(i-1,j+1);//一步走一个台阶 f(i-2,j+1);//一步走两个台阶 } }