当前位置: 代码迷 >> J2SE >> 有两道试题要请教大家
  详细解决方案

有两道试题要请教大家

热度:163   发布时间:2016-04-24 01:24:13.0
有两道试题要请问大家


(a+b)的n次幂的展开式中各项的系数很有规律,对于n=2,3,4时分别是:1 2 1, 1 3 3 1,1 4 6 4 1。这些系数构成了著名的杨辉三角形:
  1
  1 1
  1 2 1
  1 3 3 1
  1 4 6 4 1
  1 5 10 10 5 1

下列的程序给出了计算第m层的第n个系数的计算方法,试完善之(m,n都从0算起)。
public static int f(int m, int n)
{
if(m==0) return 1;
if(n==0 || n==m) return 1;
return __________________________; 
}




任意一个5位数,比如:34256,把它的各位数字打乱,重新排列,可以得到一个最大的数:65432,一个最小的数23456。求这两个数字的差,得:41976,把这个数字再次重复上述过程(如果不足5位,则前边补0)。如此往复,数字会落入某个循环圈(称为数字黑洞)。
比如,刚才的数字会落入:[82962, 75933, 63954, 61974] 这个循环圈。

请编写程序,找到5位数所有可能的循环圈,并输出,每个循环圈占1行。其中5位数全都相同则循环圈为 [0],这个可以不考虑。循环圈的输出格式仿照:
[82962, 75933, 63954, 61974]
其中数字的先后顺序可以不考虑。


------解决方案--------------------
第一题:f((m-1),(n-1))+f((m-1),n); 
就是其左上角的数,与正上面的数之和。

------解决方案--------------------
import java.util.Scanner;

public class PascalTriangle {


 public static void main(String[] args) {
  
System.out.print("Please input a digit for pascal triangle: ");
  
Scanner scanner = new Scanner(System.in);
  
final int num = scanner.nextInt();
  
int[][] ary = getPascalTriangle(num);
  
for(int[] item: ary){
for(int value: item){
System.out.print((value > 0? value: "") + " ");
}
System.out.println();
}

 }

 private static int[][] getPascalTriangle(final int num) {
int[][] ary = new int[num][num];
  
for(int i = 0; i < ary.length; i++){
ary[i][0] = 1;
ary[i][i] = 1;
}
  
for(int i = 1; i < ary.length; i++){
for(int j = 1; j <= i; j++){
ary[i][j] = ary[i-1][j-1] + ary[i-1][j];
}
}
return ary;
 }
}
百度一下
------解决方案--------------------
第二题我的思路。
先定义一个数组,长度99999。
int[] record = new int[99999];
for (int i = 1; i < 99999; i++) {
int temp = i;
while(true) {
int minValue = getMinValue(temp);
if (record[minValue] == 0) {
//没出现过,设置为已出现
record[minValue] = 1;
} else {
if (record[minValue] == 1) {
//出现过,黑洞成型,输出黑洞值。
......
record[minValue] == 2;
break;
} else {
//出现过,而且输出过黑洞值,退出,看下一个值。
break;
}
}
int maxValue = getMaxValue(temp);
temp = maxValue - minValue;
}
}
细节没具体写,估计应该可以完成任务吧。
------解决方案--------------------
终于让我做出第二题了,不容易啊
Java code
import java.util.*;public class Test {    public static int maxNum(int num)    {        int[] place = new int[5];        for (int i = 0; i < 5; i++)        {            place[i] = num % 10;            num /= 10;        }        Arrays.sort(place);        int maxNum = 0;        for (int i = 4; i >= 0; i--)        {            maxNum *= 10;            maxNum += place[i];        }        return maxNum;    }        public static int minNum(int num)    {        int[] place = new int[5];        for (int i = 0; i < 5; i++)        {            place[i] = num % 10;            num /= 10;        }        Arrays.sort(place);        int minNum = 0;        for (int i = 0; i < 5; i++)        {            minNum *= 10;            minNum += place[i];        }        return minNum;    }        public static void main(String[] args)    {        int[] bNumUsed = new int[100000];    //用来标记数字,-1表示没有用过,不为-1表示在第几轮的循环里面        ArrayList<ArrayList<Integer>> circleList = new ArrayList<ArrayList<Integer>>();        ArrayList<Integer> circle = new ArrayList<Integer>();                for (int i = 0; i < bNumUsed.length; i++)        {            bNumUsed[i] = -1;        }                loop:        for (int i = 0; i < 100000; i++)        {            //System.out.println(i);            if (bNumUsed[i] != -1)            {                continue loop;            }            for (int t = i; t != 0;)            {                if (bNumUsed[t] == -1)                {                    bNumUsed[t] = i;                    circle.add(t);                    t = maxNum(t) - minNum(t);                }                else if (bNumUsed[t] != i)                {                    circle = new ArrayList<Integer>();                    continue loop;                                    }                else                {                    t = circle.indexOf(t);                    for (int j = 0; j < t; j++)                    {                        circle.remove(0);                    }                    circleList.add(circle);                    circle = new ArrayList<Integer>();                    continue loop;                }            }        }                for (ArrayList<Integer> cir : circleList)        {            System.out.println(cir);        }    }}
  相关解决方案