/************************************************************************************
作者: 徐权
完成日期:20150721
函数功能:幻方功能的实现(每行每列每个对角线的和是相等的)
*************************************************************************************/
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define N 10 //下面有手动输入函数,如果使用,请将这条代码注释,下面scanf()函数代码激活,默认N为10
int main()
{
int **huanfang;
int i, j;
int count = 1;
//手动输入调用函数
//int N;
//puts("请输入幻方矩阵的边宽:");
//scanf_s("%d", &N); //VS2013及以上平台手动输入函数调用
//scanf("%d", &N); //VC++6.0 等C89的标准库调用函数,linux c99调用也可以
huanfang = (int **)malloc(sizeof(int *)*N);
for (i = 0; i < N; i++)
{
huanfang[i] = (int *)malloc(sizeof(int)*N);
}
if (huanfang == NULL)
{
puts("内存开辟失败!!");
}
for ( i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
huanfang[i][j] = 0;
printf("%5d ",huanfang[i][j]);//设置的数字宽度为5
}
printf("\n");
}
printf("askjdfjashfasgsdg\n");
i = 0;
j = (int)(N + 1) / 2;
while (1)
{
if (huanfang[i][j] == 0)
{
huanfang[i][j] = count;
i = (i + 1) % N;
j =(abs (j + N - 1)) % N;
count++;
}
else
{
i = (abs(i + N - 1)) % N;
j = (j + 2) % N;
huanfang[i][j] = count;
i = (i + 1) % N;
j = (abs(j + N - 1)) % N;
count++;
}
if (count == (N*N+1))
{
break;
}
}
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
printf("%5d ", huanfang[i][j]);//设置的数字宽度为5
}
printf("\n");
}
system("pause");
return 0;
作者: 徐权
完成日期:20150721
函数功能:幻方功能的实现(每行每列每个对角线的和是相等的)
*************************************************************************************/
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define N 10 //下面有手动输入函数,如果使用,请将这条代码注释,下面scanf()函数代码激活,默认N为10
int main()
{
int **huanfang;
int i, j;
int count = 1;
//手动输入调用函数
//int N;
//puts("请输入幻方矩阵的边宽:");
//scanf_s("%d", &N); //VS2013及以上平台手动输入函数调用
//scanf("%d", &N); //VC++6.0 等C89的标准库调用函数,linux c99调用也可以
huanfang = (int **)malloc(sizeof(int *)*N);
for (i = 0; i < N; i++)
{
huanfang[i] = (int *)malloc(sizeof(int)*N);
}
if (huanfang == NULL)
{
puts("内存开辟失败!!");
}
for ( i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
huanfang[i][j] = 0;
printf("%5d ",huanfang[i][j]);//设置的数字宽度为5
}
printf("\n");
}
printf("askjdfjashfasgsdg\n");
i = 0;
j = (int)(N + 1) / 2;
while (1)
{
if (huanfang[i][j] == 0)
{
huanfang[i][j] = count;
i = (i + 1) % N;
j =(abs (j + N - 1)) % N;
count++;
}
else
{
i = (abs(i + N - 1)) % N;
j = (j + 2) % N;
huanfang[i][j] = count;
i = (i + 1) % N;
j = (abs(j + N - 1)) % N;
count++;
}
if (count == (N*N+1))
{
break;
}
}
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
printf("%5d ", huanfang[i][j]);//设置的数字宽度为5
}
printf("\n");
}
system("pause");
return 0;
}
没有优化,欢迎批评和讨论