| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3385 人关注过本帖
标题:求助!!!谭浩强的c语言教材上一道魔方阵的习题!!(答案错!)
取消只看楼主 加入收藏
阎魔瞳
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-12-2
收藏
 问题点数:0 回复次数:4 
求助!!!谭浩强的c语言教材上一道魔方阵的习题!!(答案错!)
谭浩强的C程序设计第3版习题7.7答案错,得不到正确结果。
以下是我自己所编的程序,但结果也不对,我也查不出错误,请大家帮忙指正。
题目:输出魔方阵,所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。例如,三阶魔方阵为
8 1 6
3 5 7
4 9 2
要求输出由1~n*n之间的自然数构成的魔方阵(n为奇数)
分析:
魔方阵中各数的排列规律如下:
1、将1放在第一行中间一列;
2、从2开始直到n*n止各数依次按下列规则存放:每一个数存放的行比前一个数的行数减一,列数加一(例如上面的三阶魔方阵,5在4的上一行
后一列);
3、如果上一行的行数为1,则下一个数的行数为n(指最下一行)。例如,1在第1行,则2应放在最下一行,列数同样加1;
4、当上一个数的列数为n时,下一个数的列数应为1,行数减1。例如,2在第3行最后一列,则3应放在第2行第1列;
5、如果按照上面规则确定的位置上已有数,或上一个数是第1行第n列时,则把下一个数放在上一个数的下面。例如,按上面的规定,4应该放
在第1行第二列,但该位置已被1占据,所以4就放在3的下面。由于6是第1行第3列(即最后一列),故7放在6下面。
按此方法可以得到任何阶的魔方阵。
我写的程序:
#include<stdio.h>
void main()
{
int l,m,k,j=1,n,temp1,temp2,flag1=0,flag2=0,i=1,a[16][16];
scanf("%d",&n);
j=n/2+1;
for(l=1;l<=n;l++)
for(m=1;m<=n;m++)
a[l][m]=0;
a[1][j]=1;
for(k=2;k<=n*n;k++)
{
if(i==1){temp1=i;i=n+1;flag1=1;}
if(j==n){temp2=j;j=0;flag2=2;}
if(a[i-1][j+1]==0)
{
a[i-1][j+1]=k;
i=i-1;j=j+1;
}
else
{
if(flag1==0&&flag2==0)
{
if(i==n)i=0;a[i+1][j]=k;i=i+1;
}
if(flag1==1&&flag2==2)
{
a[temp+1][temp2]=k;
i=temp+1;j=temp2;
}
if(flag1==1&&flag2==0)
{
a[temp1+1][j]=k;
i=temp1+1;flag1=0;
}
if(flag1==0&&flag2==2)
{
if(i==n)i=0;
a[i+1][temp2]=k;j=temp2;flag2=0;
}
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("%d\t",a[i][j]);
printf("\n")
}
}

程序到此结束,但执行不出正确结果。尽管我写的程序繁琐,但我仍想知道为什么结果不对呢?

[[italic] 本帖最后由 阎魔瞳 于 2007-12-2 01:17 编辑 [/italic]]
搜索更多相关主题的帖子: 谭浩强 魔方 c语言 习题 教材 
2007-12-02 00:51
阎魔瞳
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-12-2
收藏
得分:0 
谢谢啊,麻烦你了
不过我们现在才上到第七章数组,函数啥的还没上,看你写的这个有点云里雾里,但还是努力看看吧。
上面的程序是我自己写的,一看就是初学者的呢
谭浩强的答案倒是简单,但它是乱写的???!晕死

中科大铁杆fans
2007-12-02 10:28
阎魔瞳
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-12-2
收藏
得分:0 
哇噻!好强!但是我有几个问题不懂,还想请教一下:
1、system("pause");
     return 0;
这句是作什么用的?我运行时把它删去结果也是正确的,为什么要加这句话?system 和 return我还没学,麻烦说清楚一点。
2、为什么main函数要定义为整型?我们一般写的都是void。
3、这样的程序算很简单吗?我花了大半天才写了个错的程序出来,只有部分算法思路还对.....还有现在发现谭叔的书真的....变量都用abcdef....晕死,自己写的都看不懂了。

[[italic] 本帖最后由 阎魔瞳 于 2007-12-2 11:50 编辑 [/italic]]

中科大铁杆fans
2007-12-02 11:42
阎魔瞳
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-12-2
收藏
得分:0 
对对,我发现你对各种语句应用很灵活,像我逮着个for和if就不知道用别的了。
这能怪老谭吗?唉.....

中科大铁杆fans
2007-12-02 11:44
阎魔瞳
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-12-2
收藏
得分:0 
哎?那应该用什么书、什么工具呢?是我们老师叫用这个的,而且很多人都用turbo啊

中科大铁杆fans
2007-12-02 11:54
快速回复:求助!!!谭浩强的c语言教材上一道魔方阵的习题!!(答案错!)
数据加载中...
 
   



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

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