会玩九宫格吗,1-9,9个数字排3排,横向纵向斜着加都是15 用代码写出来,您是怎样一个算法??
发布网友
发布时间:2022-05-07 22:56
我来回答
共4个回答
热心网友
时间:2023-11-19 00:16
这个方法适用于所有奇数幻方:
首先,把1放在中间一列最上边的方格中。从1开始,按对角线方向(比如说从左下到右下的方向)顺次把由小到大的各数放入各方格中,在这个过程中:
1 如果碰到顶,则折向底
2 如果到达右侧,则转向左侧
3 如果进行中轮到的方格中已有数或到达右上角,则退至前一格的下方。
8 1 6
3 5 7
4 9 2
其中2、9是第1种情况,3、8是第2种,4、7是第3种
热心网友
时间:2023-11-19 00:16
1楼
/*2006年1月1日*/
/*九宫格的实现*/
/*新年新迹象,事事好兆头*/
/*祝自己新年快乐*/
#include <stdio.h>
#define MAX 4
#define MAX_N 3
void main()
{
int a[MAX][MAX];
int i,j;
int n,m;
int k,max;
for(i=1;i<MAX;i++)
for(j=1;j<MAX;j++)
a[i][j]=0;
i=1;j=MAX/2;
a[i][j]=1;
max=MAX_N*MAX_N+1;
for(k=2;k<max;k++)
{
if(i==1) n=MAX_N;
else n=i-1;
if(j==1) m=MAX_N;
else m=j-1;
if(a[n][m])
if(i==MAX_N)
{
i=1;
a[i][j]=k;
}
else a[++i][j]=k;
else/*当待填如格子是没数时*/
{
if(i==1) {i=MAX_N;a[i][--j]=k;}
else if(j==1)
{j=MAX_N;a[--i][j]=k;}
else a[--i][--j]=k;
}
}
for(i=1;i<MAX;i++)
{
for(j=1;j<MAX;j++)
printf("%2d",a[i][j]);
printf("\n");
}
}追问这是您06年做的吗?
追答注释无所谓,能出结果就行了
热心网友
时间:2023-11-19 00:16
这个方法适用于所有奇数幻方:
首先,把1放在中间一列最上边的方格中。从1开始,按对角线方向(比如说从左下到右下的方向)顺次把由小到大的各数放入各方格中,在这个过程中:
1 如果碰到顶,则折向底
2 如果到达右侧,则转向左侧
3 如果进行中轮到的方格中已有数或到达右上角,则退至前一格的下方。
8 1 6
3 5 7
4 9 2
其中2、9是第1种情况,3、8是第2种,4、7是第3种
热心网友
时间:2023-11-19 00:17
中间是5,两边之和是10 ,即第一行8 3 4第二行1 5 9第三行是6 7 2
热心网友
时间:2023-11-19 00:16
1楼
/*2006年1月1日*/
/*九宫格的实现*/
/*新年新迹象,事事好兆头*/
/*祝自己新年快乐*/
#include <stdio.h>
#define MAX 4
#define MAX_N 3
void main()
{
int a[MAX][MAX];
int i,j;
int n,m;
int k,max;
for(i=1;i<MAX;i++)
for(j=1;j<MAX;j++)
a[i][j]=0;
i=1;j=MAX/2;
a[i][j]=1;
max=MAX_N*MAX_N+1;
for(k=2;k<max;k++)
{
if(i==1) n=MAX_N;
else n=i-1;
if(j==1) m=MAX_N;
else m=j-1;
if(a[n][m])
if(i==MAX_N)
{
i=1;
a[i][j]=k;
}
else a[++i][j]=k;
else/*当待填如格子是没数时*/
{
if(i==1) {i=MAX_N;a[i][--j]=k;}
else if(j==1)
{j=MAX_N;a[--i][j]=k;}
else a[--i][--j]=k;
}
}
for(i=1;i<MAX;i++)
{
for(j=1;j<MAX;j++)
printf("%2d",a[i][j]);
printf("\n");
}
}追问这是您06年做的吗?
追答注释无所谓,能出结果就行了
热心网友
时间:2023-11-19 00:16
这个方法适用于所有奇数幻方:
首先,把1放在中间一列最上边的方格中。从1开始,按对角线方向(比如说从左下到右下的方向)顺次把由小到大的各数放入各方格中,在这个过程中:
1 如果碰到顶,则折向底
2 如果到达右侧,则转向左侧
3 如果进行中轮到的方格中已有数或到达右上角,则退至前一格的下方。
8 1 6
3 5 7
4 9 2
其中2、9是第1种情况,3、8是第2种,4、7是第3种
热心网友
时间:2023-11-19 00:16
这个方法适用于所有奇数幻方:
首先,把1放在中间一列最上边的方格中。从1开始,按对角线方向(比如说从左下到右下的方向)顺次把由小到大的各数放入各方格中,在这个过程中:
1 如果碰到顶,则折向底
2 如果到达右侧,则转向左侧
3 如果进行中轮到的方格中已有数或到达右上角,则退至前一格的下方。
8 1 6
3 5 7
4 9 2
其中2、9是第1种情况,3、8是第2种,4、7是第3种
热心网友
时间:2023-11-19 00:17
中间是5,两边之和是10 ,即第一行8 3 4第二行1 5 9第三行是6 7 2
热心网友
时间:2023-11-19 00:18
4 3 8
9 5 1
2 7 6
热心网友
时间:2023-11-19 00:16
1楼
/*2006年1月1日*/
/*九宫格的实现*/
/*新年新迹象,事事好兆头*/
/*祝自己新年快乐*/
#include <stdio.h>
#define MAX 4
#define MAX_N 3
void main()
{
int a[MAX][MAX];
int i,j;
int n,m;
int k,max;
for(i=1;i<MAX;i++)
for(j=1;j<MAX;j++)
a[i][j]=0;
i=1;j=MAX/2;
a[i][j]=1;
max=MAX_N*MAX_N+1;
for(k=2;k<max;k++)
{
if(i==1) n=MAX_N;
else n=i-1;
if(j==1) m=MAX_N;
else m=j-1;
if(a[n][m])
if(i==MAX_N)
{
i=1;
a[i][j]=k;
}
else a[++i][j]=k;
else/*当待填如格子是没数时*/
{
if(i==1) {i=MAX_N;a[i][--j]=k;}
else if(j==1)
{j=MAX_N;a[--i][j]=k;}
else a[--i][--j]=k;
}
}
for(i=1;i<MAX;i++)
{
for(j=1;j<MAX;j++)
printf("%2d",a[i][j]);
printf("\n");
}
}追问这是您06年做的吗?
追答注释无所谓,能出结果就行了
热心网友
时间:2023-11-19 00:16
1楼
/*2006年1月1日*/
/*九宫格的实现*/
/*新年新迹象,事事好兆头*/
/*祝自己新年快乐*/
#include <stdio.h>
#define MAX 4
#define MAX_N 3
void main()
{
int a[MAX][MAX];
int i,j;
int n,m;
int k,max;
for(i=1;i<MAX;i++)
for(j=1;j<MAX;j++)
a[i][j]=0;
i=1;j=MAX/2;
a[i][j]=1;
max=MAX_N*MAX_N+1;
for(k=2;k<max;k++)
{
if(i==1) n=MAX_N;
else n=i-1;
if(j==1) m=MAX_N;
else m=j-1;
if(a[n][m])
if(i==MAX_N)
{
i=1;
a[i][j]=k;
}
else a[++i][j]=k;
else/*当待填如格子是没数时*/
{
if(i==1) {i=MAX_N;a[i][--j]=k;}
else if(j==1)
{j=MAX_N;a[--i][j]=k;}
else a[--i][--j]=k;
}
}
for(i=1;i<MAX;i++)
{
for(j=1;j<MAX;j++)
printf("%2d",a[i][j]);
printf("\n");
}
}追问这是您06年做的吗?
追答注释无所谓,能出结果就行了
热心网友
时间:2023-11-19 00:17
中间是5,两边之和是10 ,即第一行8 3 4第二行1 5 9第三行是6 7 2
热心网友
时间:2023-11-19 00:18
4 3 8
9 5 1
2 7 6
热心网友
时间:2023-11-19 00:17
中间是5,两边之和是10 ,即第一行8 3 4第二行1 5 9第三行是6 7 2
热心网友
时间:2023-11-19 00:18
4 3 8
9 5 1
2 7 6
热心网友
时间:2023-11-19 00:16
这个方法适用于所有奇数幻方:
首先,把1放在中间一列最上边的方格中。从1开始,按对角线方向(比如说从左下到右下的方向)顺次把由小到大的各数放入各方格中,在这个过程中:
1 如果碰到顶,则折向底
2 如果到达右侧,则转向左侧
3 如果进行中轮到的方格中已有数或到达右上角,则退至前一格的下方。
8 1 6
3 5 7
4 9 2
其中2、9是第1种情况,3、8是第2种,4、7是第3种
热心网友
时间:2023-11-19 00:16
1楼
/*2006年1月1日*/
/*九宫格的实现*/
/*新年新迹象,事事好兆头*/
/*祝自己新年快乐*/
#include <stdio.h>
#define MAX 4
#define MAX_N 3
void main()
{
int a[MAX][MAX];
int i,j;
int n,m;
int k,max;
for(i=1;i<MAX;i++)
for(j=1;j<MAX;j++)
a[i][j]=0;
i=1;j=MAX/2;
a[i][j]=1;
max=MAX_N*MAX_N+1;
for(k=2;k<max;k++)
{
if(i==1) n=MAX_N;
else n=i-1;
if(j==1) m=MAX_N;
else m=j-1;
if(a[n][m])
if(i==MAX_N)
{
i=1;
a[i][j]=k;
}
else a[++i][j]=k;
else/*当待填如格子是没数时*/
{
if(i==1) {i=MAX_N;a[i][--j]=k;}
else if(j==1)
{j=MAX_N;a[--i][j]=k;}
else a[--i][--j]=k;
}
}
for(i=1;i<MAX;i++)
{
for(j=1;j<MAX;j++)
printf("%2d",a[i][j]);
printf("\n");
}
}追问这是您06年做的吗?
追答注释无所谓,能出结果就行了
热心网友
时间:2023-11-19 00:17
中间是5,两边之和是10 ,即第一行8 3 4第二行1 5 9第三行是6 7 2
热心网友
时间:2023-11-19 00:18
4 3 8
9 5 1
2 7 6
热心网友
时间:2023-11-19 00:18
4 3 8
9 5 1
2 7 6