在控制台上输出
8 1 6
3 5 7
4 9 2
该怎么写啊 (用数组)
想了好久没有思路,那个大虾给个思路啊
规律就是 横竖斜 相加等于15
8 1 6
3 5 7
4 9 2
该怎么写啊 (用数组)
想了好久没有思路,那个大虾给个思路啊
规律就是 横竖斜 相加等于15
解决方案 »
- java wait()的一个问题
- 简单定义一个小接口,实现出错,.......
- ireport针打不正常及如何精确控制纸长?
- 除了用CharToByteConverter的方法外, Java还有什么方法读取字节流?
- 大家帮帮忙啊!java我没有实际经验,这两道面试题该选什么?
- 事件的问题
- 新手,问一个小问题,关于(String[] args)还是(String args[])??
- 请问迭代器
- 怎么屏蔽JDialog的关闭按钮,既对话框右上角的X
- 字符串按固定格式输出问题请教
- Java中如何调用C# dll中的带有List参数的函数及返回List对象(Java JNI高手,Help!)
- 关于synchronized
如果已经输入好的话~~只要用for输出3*3数组就可以了~~
参考维基百科:
http://zh.wikipedia.org/wiki/%E5%B9%BB%E6%96%B9文中思路已经给出,请参考。
int number[][]=new int[3][3];
number[1][1]=5;
number[0][0]=(int)(Math.random()*5);
number[0][2]=(int)(Math.random()*5);
number[0][1]=15-number[0][0]-number[0][2];
number[2][2]=15-number[0][0]-number[1][1];
number[1][2]=15-number[0][2]-number[2][2];
number[2][0]=15-number[0][2]-number[1][1];
number[1][0]=15-number[0][0]-number[2][0];
number[2][1]=15-number[2][0]-number[2][2];
return number;
}
public void printNumber(int[][] number){
for(int j=0;j<3;j++){
for(int i=0;i<3;i++){
System.out.print(number[j][i]+" ");
}
System.out.println();
}
}
public static void main(String[] args) {
Answer ep = new Answer();
ep.printNumber(setNumber()); }}方法有点笨,静态赋值。等待高手提出好的方法
a b c
d e f
g h i用九个for(a=1;a<10;a++)
for(b=1;b<10;b++)
.................
{
当 sum(a:i)=45
a+b+C=15
d+e+f=15
g+h+i=15;行
a+d+g=15
b+e+h=15
g+h+i=15;列
a+e+i=15
c+e+g=15;斜
就可以输出结果啦!
}
思路很简单吧!^_^!
//同时也谢谢楼上的兄弟们了public class Nine15 {
public Nine15() {
} public static void main(String[] args) {
Nine15 nine15 = new Nine15();
nine15.makeMatrix();
}
private boolean test(int[][] m){
int sums[] = {0,0,0};
boolean finishes[] = {true, true, true};
for(int j=0; j<3; j++){
int sum = 0;
boolean finished = true;
for(int i=0; i<3; i++){
sum+= m[j][i];
sums[i] += m[j][i];
if(m[j][i]==0){
finished = false;
finishes[i] = false;
}
}
if(sum>15){
return false;
}
if(finished&&sum!=15){
return false;
}
}
if(sums[0]>15||sums[1]>15||sums[2]>15){
return false;
}
if(finishes[0]&&sums[0]<15){
return false;
}
if(finishes[1]&&sums[1]<15){
return false;
}
if(finishes[2]&&sums[2]<15){
return false;
}
int s1 = m[0][0]+m[1][1]+m[2][2];
if(s1>15){
return false;
}
if(m[0][0]>0&&m[1][1]>0&&m[2][2]>0&&s1<15){
return false;
}
int s2 = m[0][2]+m[1][1]+m[2][0];
if(s2>15){
return false;
}
if(m[0][2]>0&&m[1][1]>0&&m[2][0]>0&&s2<15){
return false;
}
return true;
} private void print(int[][] m){
for(int j=0; j<3; j++){
for(int i=0; i<3; i++){
System.out.print("\t"+m[j][i]);
}
System.out.println();
}
} private void makeMatrix() {
int m[][] = new int[3][3];
int p=0;
int v=9;
int pv[] = new int[10];
while(v>0){
if(p==9){
++v;
if(v==10){
break;
}
p=pv[v];
int rr = p/3;
int cc = p%3;
m[rr][cc] = 0;
pv[v] = 0;
p++;
continue;
}
int r = p/3;
int c = p%3;
if(m[r][c]>0){
p++;
continue;
}
m[r][c] = v;
if(test(m)){
if(v>1){
pv[v] = p;
v--;
p = 0;
}else{
System.out.println("=======");
print(m);
m[r][c] = 0;
p++;
}
}else{
m[r][c] = 0;
p++;
}
}
}
}
{ /**
* Method main
*
*
* @param args
*
*/
public static void main(String[] args)
{
// TODO: Add your code here
final int SIZE=3; //这里就是你自定义的阶数
int mat[][]=new int [SIZE][SIZE];
int i=0,j,k,n;
n=SIZE;
j=n/2;
for(k=1;k<=n*n;k++)
{
mat[i][j]=k;
if(k%n==0)
{
i=(i+1)%n;
}
else
{
i=(i-1+n)%n;
j=(j+1)%n;
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
System.out.print(mat[i][j]+"\t");
System.out.println();
}
}
}