第一题:
输入n,找两个数(分别为ABC,和ACC格式,A不为0,A B C各不相同)的和为n;有这样的数的话,就先输出多少对,每行输出这两个数(按照每对中ABC的大小排序输出)
import java.util.*; public class Main { public static void main(String[] args) { Scanner scin = new Scanner(System.in); String str = scin.nextLine(); int n = Integer.valueOf(str); List<Integer> list = new ArrayList<>(); if(n<2000&&n>100&&n%2==0) for (int i = 1; i <= 9; i++) { for (int j = 0; j <= 9; j++) { if(j==i) continue; for (int k = 0; k <= 9; k++) { if(k==j||k==i) continue; int x = i*100+j*10+k; int y = i*100+k*10+k; if(x+y==n){ list.add(x); } } } } System.out.println(list.size()); if(list.size()>0){ Collections.sort(list); for (int i = 0; i < list.size(); i++) { int kk = n - list.get(i); System.out.println(list.get(i) + " " + kk); } } } }
第二题:
以迂回的形式在一个n*n的数组中保存斐波那契数列,已知数列最小的前两位都为1,最大的一位在数组第一行第一列,请按行输出这个数组(应该是剑指offer里原题稍微改版)
唯一要注意的是数组要以long类型保存,int的话会溢出;
import java.util.*; public class Main{ public static void main(String[] args) { Scanner scin = new Scanner(System.in); String str = scin.nextLine(); int n = Integer.valueOf(str); if(n<=0) return; long []arr = new long[n*n]; if(n==1){ arr[0] = 1; } if(n>=2){ arr[0]=1;arr[1]=1; for (int i = 2; i < n * n; i++) { arr[i] = arr[i-1]+arr[i-2]; } } long matrix[][] = new long[n][n]; int times =(n-1)/2+1; int index = n*n-1; for(int i=0;i<times;i++) { //把数组的数放到矩阵中 for (int a = i; a < n - i; a++) { matrix[i][a] = arr[index--]; } for (int b = i + 1; b < n - i; b++) { matrix[b][n - i - 1] = arr[index--]; } for (int c = n - i - 2; c >= i && (i != n - 1 - i); c--) { matrix[n - i - 1][c] = arr[index--]; } for (int d = n - i - 2; d > i && (i != n - i - 1); d--) { matrix[d][i] = arr[index--]; } } for (int i = 0; i < n; i++) { //按行打印出这个矩阵 for (int j = 0; j < n-1; j++) { System.out.print(matrix[i][j]+" "); } System.out.println(matrix[i][n-1]); } } }
全部评论
(0) 回帖