| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 693 人关注过本帖
标题:请教大神~这个5阶幻方哪里错了??
只看楼主 加入收藏
初D行者
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2015-1-26
结帖率:0
收藏
已结贴  问题点数:20 回复次数:6 
请教大神~这个5阶幻方哪里错了??
#include "stdafx.h"
#include<stdio.h>

const int n=5;
int _tmain(int argc, _TCHAR* argv[])
{
    int a[n][n]={0};
    int k=1;
    int i=0;
    int j=n/2;
    int iold,jold;
    int maxk=n*n;
    for(k=1;k<=maxk;k++);
    {
        
    a[i][j]=k;
    iold=i;
    jold=j;
    i=i-1;
    j=j+1;
    if(i>=0&&j>=0)
        j=0;
    else if(i<0&&j<n)
        i=n-1;
         else if(i<0&&j>=n)
              {
                i=1;
                j=n-1;
              }
            if(a[i][j]>0)
            {
              i=iold=1;
              j=jold;
             }
        }
    for(i=0;i<n;i++)
       {
    for(j=0;j<n;j++)
        printf("%d\t",a[i][j]);
        printf("\n");
        }
    getchar();
 
    }
搜索更多相关主题的帖子: include 
2015-01-26 15:15
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:10 
5阶幻方是神马意思  或者把你想得到的结果画出来

(如果想让你的问题尽快得到答案,请不要让别人去猜)

DO IT YOURSELF !
2015-01-26 15:17
初D行者
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2015-1-26
收藏
得分:0 
15   8   1   24  17
16  14   7    5  23
22  20   13  6   4
3   21   19  12  10
9   2    25  10  11
这是结果(忽略格式)
魔方阵,古代又称“纵横图”,是指组成元素为自然数1、2…n的平方的n×n的方阵,其中每个元素值都不相等,且每行、每列以及主、副对角线上各n个元素之和都相等。
2015-01-26 22:28
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:10 

目前看这句“for(k=1;k<=maxk;k++);”不应该有分号,但去掉后也不正常,应该是算法有问题。

能编个毛线衣吗?
2015-01-26 23:25
初D行者
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2015-1-26
收藏
得分:0 
谢谢楼上
2015-01-27 13:19
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
这个要使用全排列算法,25个数全排列有52兆组合,不知道你电脑有多快,反正我等了2个多小时也没有出结果。代码如下:
程序代码:
#include <stdio.h>
const int n=5; //幻方行列元素个数
void listArray(int *p,int s)
{//显示符合条件的幻方
    int i,j,k=0,c=0,r=0;
    for(i=0;i<s;i++)k+=p[i];//第一行的和,作为各行列、对角和的参考
    if(k==65)
        k=k;
    for(i=0;i<s;i++)
    {
        c=0;
        r=0;
        for(j=0;j<2;j++)
        {
            c+=p[i*s+j];
            r+=p[j*s+i];
        }
        if(c!=k||r!=k)return;//判断行列是否相等,两个判断return去掉可以显示全部组合
    }
    c=0;
    r=0;
    for(i=0;i<s;i++)
    {
        j=s-i-1;
        c+=p[i*s+i];
        r+=p[j*s+j];
    }
    if(c!=k||r!=k)return;//判断两对角线是否相等,两个判断return去掉可以显示全部组合
    for(i=0;i<s;i++)
    {
        for(j=0;j<s;j++)printf("%d\t",p[i*s+j]);
        printf("\n");
    }
    printf("**********\n");
}

void prep(int *p,int s,int e)
{//全排列,参考了网上代码,把n值放小点可验证其算法运行正确
    int i,j;
    if(s>=e*e)
    {
        listArray(p,e);
        return;
    }
    for(i=s;i<e*e;i++)
    {
        j=p[i];
        p[i]=p[s];
        p[s]=j;
        prep(p,s+1,e);//函数递归
        j=p[i];
        p[i]=p[s];
        p[s]=j;
    }
}

void main()
{
    int i,a[n][n],*p;
    p=&a[0][0];
    for(i=0;i<n*n;i++)p[i]=i+1;//对幻方赋原始值(1...25)
    prep(&a[0][0],0,n);
}



[ 本帖最后由 wmf2014 于 2015-1-27 17:58 编辑 ]

能编个毛线衣吗?
2015-01-27 17:50
初D行者
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2015-1-26
收藏
得分:0 
回复 6楼 wmf2014
谢啦,辛苦了
2015-02-03 16:18
快速回复:请教大神~这个5阶幻方哪里错了??
数据加载中...
 
   



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

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