请教一个问题 如何1~9这九个数填充到一个9*9的数组 并输出所有可能 请教一个问题 如何1~9这九个数填充到一个9*9的数组 并输出所有可能 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 /*程序不难,但是效率就不好弄了,9的81次方循环,采用模拟进位的方式比如1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1下一次最低位增加1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 2最低位依次增加,当最低位到达9的时候1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 9最低位再继续增加的时候,发生进位1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 11 1 1 1 1 1 1 2 1依次如此累加,直到增加到9 9 9 9 9 9 9 9 99 9 9 9 9 9 9 9 99 9 9 9 9 9 9 9 99 9 9 9 9 9 9 9 99 9 9 9 9 9 9 9 99 9 9 9 9 9 9 9 99 9 9 9 9 9 9 9 99 9 9 9 9 9 9 9 99 9 9 9 9 9 9 9 9为止退出循环*/public class Test { public static void main(String[] args) throws Throwable { int n = 9; int[] num = new int[n*n]; //声明一个长度为9*9=81的数组 for (int i=0; i<num.length; i++) {num[i] = 1;} //初始化数组的81个元素都是1 while (num[0] < 10) { for (int i=0; i<num.length; i++) { //循环打印数组的81个数,每行9个 System.out.printf("%d ", num[i]); if ((i+1)%n == 0) System.out.println(); } System.out.println(); num[num.length-1]++; //模拟进位,低位增加 for (int i=num.length-1; i>0; i--) { //判断是否发生进位 if (num[i] == 9) { //如果某位到达9,则发生进位 num[i] = 1; //进位就是该位置重新赋值为1 num[i-1]++; //该位置的前一位置增加1 } else { //如果没有发生进位,后续的也不会再发生了 break; //避免无意义的循环,break退出进位判断 } } } }} 【新手求助】让我很郁闷的关于swing布局的问题 为什么达不到想要的效果 带有JTabbedPane JAVA如何实现音频的对比 如何在JAVA程序中播放MIDI音乐? !!!如何通过相对路径读取属性文件??? 关于jsp显示乱码的问题 小问题1 请高手们探讨一下目录树的多种算法??? 有关applet中剪贴板的问题(急、很急、非常急) 可控直线类 学习JAVA 求解,有时input=keyboard.nextLine()语句被忽略的问题 如何配置java环境变量
程序不难,但是效率就不好弄了,9的81次方循环,采用模拟进位的方式
比如
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1下一次最低位增加
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 2最低位依次增加,当最低位到达9的时候
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 9最低位再继续增加的时候,发生进位
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 2 1依次如此累加,直到增加到
9 9 9 9 9 9 9 9 9
9 9 9 9 9 9 9 9 9
9 9 9 9 9 9 9 9 9
9 9 9 9 9 9 9 9 9
9 9 9 9 9 9 9 9 9
9 9 9 9 9 9 9 9 9
9 9 9 9 9 9 9 9 9
9 9 9 9 9 9 9 9 9
9 9 9 9 9 9 9 9 9
为止退出循环
*/public class Test {
public static void main(String[] args) throws Throwable {
int n = 9;
int[] num = new int[n*n]; //声明一个长度为9*9=81的数组
for (int i=0; i<num.length; i++) {num[i] = 1;} //初始化数组的81个元素都是1 while (num[0] < 10) {
for (int i=0; i<num.length; i++) { //循环打印数组的81个数,每行9个
System.out.printf("%d ", num[i]);
if ((i+1)%n == 0) System.out.println();
}
System.out.println(); num[num.length-1]++; //模拟进位,低位增加
for (int i=num.length-1; i>0; i--) { //判断是否发生进位
if (num[i] == 9) { //如果某位到达9,则发生进位
num[i] = 1; //进位就是该位置重新赋值为1
num[i-1]++; //该位置的前一位置增加1
} else { //如果没有发生进位,后续的也不会再发生了
break; //避免无意义的循环,break退出进位判断
}
}
}
}
}