免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1490 | 回复: 0
打印 上一主题 下一主题

[算法] "幻方" 算法(转) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-05-26 10:40 |只看该作者 |倒序浏览
所谓"幻方"就是一个n*n 的矩形(n为奇数)在这个矩形中有规律的填入
数值为 1--n*n 个数字 并并且满足 他的直线、对角线的和 想等
如 3*3的 矩形 排列为:
2 7 6   
9 5 1
4 3 8  
所有的 6条直线 及2条对角线 的和 均为15

程序:
#include <stdio.h>;
#include <conio.h>;
#include <ctype.h>;
#include <stdlib.h>;

int Examine_Num(int Examine);

main()
{
   int          num = 0;
   int          **Rect;
   int          RectX;
   int          RectY;
   int          Time;
   int i;
   int          j;
   int          Shiftnum;

   printf("****************\n";
   printf("  幻方程序演示\n";
   printf("****************\n\n";

   printf("请输入幻方的边长(奇数边长): ";
   
   for (scanf("%d", &num);( 1!= Examine_Num(num)); scanf("%d", &num) )
   {
   printf("\n输入数据不正确!";
   printf("\n请重新输入:";
   }
  

   // 设置排列的起始位置 中间行的最右边的列
   RectY = (num / 2);
   RectX = (num - 1);

   //分配空间  
   for (; (Rect = (int **) malloc(sizeof(int *) * num)) == NULL; )
   ;
   for (i = 0; i < num; i++)
{
for (; (Rect = (int *) malloc(sizeof(int) * num)) == NULL; )
;
for(j = 0; j < num; j++)
{
Rect[j] = -1;
}
}

Shiftnum = num;

for (Time = 1; Time <= (num * num); Time++)
{

if (Time % (Shiftnum + 1) == 0)
{
RectX -= 2 ;
//Rect[++RectY][RectX] = Time;
RectY++;
Shiftnum += num;
}

if (RectX % num == 0)
{
RectX = 0;
}

if (RectY == -1)
{
RectY += num;
}

Rect[RectY--][RectX++] = Time;
}

for(RectY = 0; RectY < num; RectY++)
{
for(RectX = 0; RectX < num; RectX++)
{
printf("%3d ", Rect[RectY][RectX]);
}
printf("\n";
free(Rect[RectY]);
}
free(Rect);

printf("\n小兔jj 我做出来了,没错吧?\n";
system("pause";

}

/*
函数名 : Exanime_Num
参数 : int Examine, int Base
返回值 : -1 1, 2, 0。
返回 1 表示Examine为奇数,
2 表示是偶数,
0 表示无法判断,
-1 表示输入的为字符。
函数说明: 根据Base判断Exanime 的奇偶。
作者 : 木玛。
原时间 : 2003.05.24。
修改时间:
修改说明:
*/
int Examine_Num(int Examine)
{
int Base = 2;

if (isalpha(Examine) != 0)
{
printf("只有输入数字才有效!";
return -1;
}

if (Examine == 0)
{
printf("零无法判断!");
return 0;
}

if (Examine % Base == 0)
{
return 2;
}
else
{
return 1;
}
}

注: 此程序无法排除输入字符 一旦输入字符就崩溃 因时间有限所以没有完成
这方面的处理 希望那位帮忙修改一下 谢谢


作 者: muma1984(抓头发的木玛)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP