用java虚拟机实现数独计算的功能,求解决代码成几何倍数增加的问题!
我是新手自学的java,我尝试着写一个数独计算器,比如用户输入3,那么输出一个只包含数组1-3的3x3的数字矩阵,且每一行每一列的数字均不重复,如果是4的话那么输出一个只...
我是新手自学的java,我尝试着写一个数独计算器,比如用户输入3,那么输出一个只包含数组1-3的3x3的数字矩阵,且每一行每一列的数字均不重复,如果是4的话那么输出一个只包含1-4的4x4的数字矩阵,我首先声明了一个二维数组,但是代码越来越多了以后我发现,越往后面写,代码就是几何倍数的增加,另外,输入3的时候,计算需要2秒左右,4大概12秒左右,但是输入5的时候。。。我等了10分钟也没有输出。。。 求解决代码增加的问题,另外再解决一下计算速度慢的问题,我是用的随机数来实现的数字的填写! 谢谢!我不想将答案写进数组然后循环输出,我想让电脑进行计算。。。。
展开
1个回答
展开全部
package know;
public class T11 {
public static void main(String[] args) {
int[][] shudu=shudu(4);
for(int i=0;i<shudu.length;i++){
for(int j=0;j<shudu[i].length;j++){
System.out.print(shudu[i][j]+" ");
}
System.out.println();
}
}
/**
* 排列规则(9)
* 123456789
234567891
345678912
456789123
567891234
678912345
789123456
891234567
912345678
* @param i
*/
public static int[][] shudu(int i){
/**
* 构造数组
*/
int[][] shudu=new int[i][];
for(int k=0;k<i;k++){
shudu[k]=new int[i];
}
/**
* 填充数字
*/
for(int k=0;k<i;k++){
int first=k+1;
for(int j=0;j<i;j++){
shudu[k][j]=first++;
if(shudu[k][j]>i){
first=1;
shudu[k][j]=first++;
}
}
}
return shudu;
}
}
设计这种程序,第一是要想清楚设计思路,确定思路之后,发现逻辑很有规律,只是多次重复这个规律,对于这种情况,一般要想到的就是用for循环或递归这两种解决方法
追问
哥们你这不对啊。。。只是每一列和每一排的数字不等于了,但是各个对角呢。。。。全都一样啊。。。
追答
传代码超出长度限制了,只能传文件,测试部分数字会报错,比如6,初步判断是不存在满足这些数字的数独,对于6乘6的数独,在网上找了几个,也是只能满足横竖,无法满足对角线
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询