| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 747 人关注过本帖
标题:关于奇数阶魔方阵
只看楼主 加入收藏
ztxzhc001
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2008-12-13
结帖率:66.67%
收藏
 问题点数:0 回复次数:2 
关于奇数阶魔方阵
#include<stdio.h>
#define N 7
void main()
{
    int i,j,k,l,a[N][N];
    i=l=0;
    j=(N-1)/2;
    k=(N-1)/2;
    a[j][k]=(N*N+1)/2;

    for(i=0;i<N;i++)
        for(l=0;l<N;l++)
            a[i][l]=0;
   
    for(i=(N*N+3)/2;i<=N*N;i++)
    {
        
        a[j+1][k+1]=i;
        j++;
        k++;
        if(j==N&&k==N)
        {
            j=j-2;
            k=k-1;
           
        }
        else
            if(k==N)
            {
               
                k=0;
            }
            if(j==N)
            {
               
                j=0;
            }
            if(a[j][k]!=0)
            {
                j=j-1;

            }

    }
    for(l=(N*N-1)/2;l>=1;l--)
    {
        a[j-1][k-1]=i;
        j--;
        k--;
        if(j==-1&&k==-1)
        {
            j=j+2;
            k=k+1;
        }
        else
            if(k==-1)
            {
                k=N-1;

            }
            if(j==-1)
            {
                j=N-1;

            }
            if(a[j][k]!=0)
            {
                j=j+1;
            }
    }
    for(i=0;i<N;i++)
    {
        for(l=0;l<N;l++)
        {
            printf("%5d   ",a[i][l]);
        }
        printf("\n");
    }
        
        
        getch();


}

运行结果不对.
麻烦大家看下.
算法的基本思路就是从中间值(N*N+1)/2开始,沿对角线递增递减.
我没看过魔方阵比较通用的解法.
这个思路自己想的.可能大家看的时候会麻烦点.
先谢过.
搜索更多相关主题的帖子: 魔方 奇数 
2008-12-15 11:23
dsx598051087
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2008-11-25
收藏
得分:0 
#include <stdio.h>
#define MAX 9
main()
{
int cube[MAX][MAX];
int i, j;
int n;
int n0;
printf(“please put num.”)

scanf("%d", &n); /*n为不大于9的奇数*/
i = 0;
j = n / 2;
for (n0 = 1; n0 <= n * n; n0++)
{
    cube[i][j] = n0;
    if (n0 % n == 0)
     i++;
    else
    {
     i--;
     if (i < 0)
      i = n - 1;
     j++;
     if (j >= n)
      j = 0;
    }
}

for (i = 0; i < n; i++)
    for (j = 0; j < n; j++)
     printf((j != n - 1) ? "%d\t" : "%d\n", cube[i][j]);
}



2008-12-15 12:50
ztxzhc001
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2008-12-13
收藏
得分:0 
回复 第2楼 dsx598051087 的帖子
很感谢。
希望能帮我的代码找出错误 。
2008-12-15 18:00
快速回复:关于奇数阶魔方阵
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024660 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved