* 魔术方阵:
* 将连续整数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
}
#include<stdio.h>int main(){
for(int i=0i<丛拿100i++)
printf("*****\肢渗n"渗饥搭)
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)