昨天想了一晚上,我同学给了我点思路,终于把代码想出来了。- public class InterviewTest {
- public static void main(String[] args) {
- //上面的一行数组
- int[] arr = {0,1,2,3,4,5,6,7,8,9};
- //计算下一行数组
- computeArr(arr);
- }
- private static void computeArr(int[] arr) {
- //先把下一行数组任意初始化,循环不断更正,知道符合规则为止
- int[] cou = {1,0,2,0,6,4,1,3,2,0};
- //存储对应数字出现的次数
- int sum = 0;
- //大循环标记,初始为true
- boolean flag = true;
- //大循环
- while(flag){
- //记录检查是否符合规则时,下一行数组首次不符合规则的下标
- int index = 0;
- for(int i=0; i<arr.length; i++){
- sum = count(arr[i],cou);
- cou[i]=sum;
- }
- //检查下一行数组是否符合规则,如果符合,退出大循环
- for(int i=0;i<arr.length;i++){
- sum = count(arr[i],cou);
- if(cou[i]!=sum){
- index = i;
- break;
- }
- index = i;
- }
- //如果检查到最后,所有的都正确,即符合规则,把大循环标记置为false,跳出大循环。
- if(index == arr.length-1)
- flag = false;
- print(arr);
- print(cou);
- }
- }
- //打印数组
- private static void print(int[] cou) {
- for(int c : cou){
- System.out.print(c +", ");
- }
- System.out.println();
- }
- //数对应数字出现的次数
- private static int count( int x,int[] cou) {
- int count=0;
- for(int i=0; i<cou.length;i++){
- if(cou[i] == x){
- count++;
- }
- }
- return count;
- }
- }
复制代码 打印结果为:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
3, 1, 2, 2, 1, 0, 0, 0, 0, 0,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
5, 2, 3, 1, 0, 1, 0, 0, 0, 0,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
5, 2, 1, 0, 0, 1, 0, 0, 0, 0,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
6, 2, 1, 0, 0, 0, 1, 0, 0, 0,
为了检验大循环每次更改下一行数组的情况,我把每次的结果打印了出来,最后一组为正确结果。当然,正式程序,要把这些打印中间的内容去掉。直接显示最后正确结果就可以了。 |