一个java小程序 在控制台上输出8 1 6 3 5 74 9 2该怎么写啊 (用数组)想了好久没有思路,那个大虾给个思路啊规律就是 横竖斜 相加等于15 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 没看懂LZ的意思~~ 如果已经输入好的话~~只要用for输出3*3数组就可以了~~ 这是三阶幻方问题。参考维基百科:http://zh.wikipedia.org/wiki/%E5%B9%BB%E6%96%B9文中思路已经给出,请参考。 public class Answer { public static int[][] setNumber(){ 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()); }}方法有点笨,静态赋值。等待高手提出好的方法 这个问题很简单的呀,大家思考的方式都太复杂!这个问题直接描述成9个变量(从1~9)相加的问题a b cd e fg 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++; } } }} public class Magic { /** * 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(); } } } 如何用java socket传输一个byte[]数组 给出服务器和客户端主要代码 JAVA基础! 求 Thinking in java 3ed 答案 JPanel 求JAVA数值计算包 jTabbedPane的用法 (出学者)怎么离线安装JDK1.4.2?用不用安装jre? 师傅们帮我看看这段代码?谢谢了 新手的问题,请高手门看看 小问题 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();
}
}
}