急需一个一百行左右的c语言编程,以include<stdio.h>开头的,再附上算法分析和流程设计和名称。
发布网友
发布时间:2022-05-10 11:27
我来回答
共1个回答
热心网友
时间:2023-10-08 21:05
/********************************************************************
* 魔术方阵:
* 将连续整数1、2、3、……、n,按某种特别顺序排在方阵里,方阵中的每一行
* 每一列或对角线位置的各自相加的和均相等。
*********************************************************************/
#include<stdio.h>
#include<stdlib.h>
// 简捷连续填数法创建魔幻方阵
int magicl(int **magic,int n)
{
if( n%2 == 0 )//n为偶数,不能创建。
return 0;
int i = 0,k = 1;
int j = (n-1)/2;
magic[i][j] = k;
while( k < n*n )
{
if( i-1 <0 && j+1 >= n )
{
i++;
magic[i][j] = ++k;
continue;
}
if( i-1 <0 )
i = n-1;
else
i--;
if(j+1 >= n)
j= 0;
else
j++;
if(magic[i][j] == -1)
magic[i][j] = ++k;
else
{
i+=2;
j--;
magic[i][j] = ++k;
}
}
return 1;
}
int main()
{
int i,j,n,sum;
int **magic;
printf("方阵的阶数:");
scanf("%d",&n);
if( !(magic =(int **)malloc(n*sizeof(int *))))
{
printf("内存分配失败!\n");
exit(1);
}
for(i = 0; i<n; ++i)
{
if( !(magic[i] = (int *)malloc(n*sizeof(int))))
{
printf("内存分配失败!\n");
exit(1);
}
}
for(i = 0; i<n; i++)
{
for(j = 0; j<n; j++)
magic[i][j] = -1;
}
if( magicl(magic,n) )
{
for(i = 0; i<n; i++)
{
for(j = 0; j<n; j++)
printf("%4d",magic[i][j]);
printf("\n");
}
sum = 0;
for(i = 0; i<n; i++)
sum += magic[i][i];
printf("\n各行、列、对角线的和为:%d\n\n",sum);
}
else
printf("生成魔幻方阵失败,可能是输入的阶数不正确!\n\n");
return 0;
}