问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言编程,输出魔方阵

发布网友 发布时间:2022-05-17 03:08

我来回答

5个回答

热心网友 时间:2023-08-03 03:35

程序代码:

#include<stdio.h>

#define N 16

int main()

{

int a[N][N]={0},i,j,k,p,n;

p=1;

while(p==1)

{

printf("Enter n(1~%d):",N);

scanf("%d",&n);

if((n!=0)&&(n<N)&&(n%2!=0))

p=0;

}

i=n+1;

j=n/2+1;

a[1][j]=1;

for(k=2;k<=n*n;k++)

{

i=i-1;

j=j+1;

if((i<1)&&(j>n))

{

i=i+2;

j=j-1;

}

else

{

if(i<1)i=n;

if(j>n)j=1;

}

if(a<i>[j]==0)a<i>[j]=k;

else

{

i=i+2;

j=j-1;

a<i>[j]=k;

}

}

for(i=1;i<=n;i++)

{

for(j=1;j<=n;j++)

printf("%4d",a<i>[j]);

printf("\n");

}

return 0;

}

扩展资料:

1.第一行中间一列的值为1。

所以用j=n/2+1确定1的列数,得出a[1][j]=1。

2.每一个数存放的行比前一个数的行数减1,列数加1。

行数用i=i-1确定,列数用j=j+1确定。

3.如果一个数行数为第一行,则下一个数行数为最后一行。

4.如果一个列行数为最后一列,则下一个数列数为第一列。

5.如果按上面的规则确定的位置上已有数,或上一个数是第一行最后一列,则把下一个数放在上一个数的下面。

热心网友 时间:2023-08-03 03:35

源代码如下:

#include<stdio.h>

#define N 5

int main()

{

int a[N][N]={0}, i, j, k, t, x, y;

i=0; /*自然数1的行标*/

j=N/2; /*自然数1的列标*/

t=N-1; /*最后一行、最后一列的下标*/

for(k=1; k<=N*N; k++)

{

a[i][j]=k;

x=i;

y=j;

if(i == 0)

i=t;

else

i=i-1;

if(j != t)

j=j+1;

else

j=0;

if(a[i][j]!=0)

{

i=x+1;

j=y;

}

}

printf("生成的5-魔方阵为:");

for(i=0; i<N; i++)

{

printf("\n");

for(j=0; j<N; j++)

{

printf("%3d", a[i][j]);

}

}

printf("\n");

return 0;

}

扩展资料

1、由于一个整型数要占用两个内存,因此,如果魔方阵中要存放的数有max个,则分配内存时要分配2*max个单元,从而有malloc(max+max)。在malloc()函数中使用max+max而不是2*max是考虑了程序运行的性能。

2、内存是一维线性的,因此在存取数组元素时,要将双下标转换为单个索引编号。在程序中直接定义了指针变量来指向数组空间,即使用malloc()函数分配的内存。

热心网友 时间:2023-08-03 03:36

你好,首先你要搞清楚魔方阵的排列规律,我看了下你的程序,只是针对奇数来排列的,而魔方阵的奇数排列规律就是:
(1) 将1放在第一行中间一列;
(2) 从2开始直到n×n止各数依次按下列规则存放:
按 45°方向向右上走,每一个数存放的行比前一个数的行数减1,列数加1;
(3) 如果行列范围超出矩阵范围,则回绕。
例如1在第1行,则2应放在最下一行,列数同样加1;
又如某个数在第n列,则下一个数应放在第一列,行数同样减1;
(4) 如果按上面规则确定的位置上已有数,或上一个数是第1行第n列时,则把下一个数放在上一个数的下面。

知道了排列规律,就好办了,程序注释如下:
#include <stdio.h>
void main()
{
int a[15][15];
int i,j,k,p,n;
p=1;
while (p=1) //我觉得这里应该是p==1,否则p=1是赋值语句,导致while判断没有效果,会一直循环
{
printf("请输入n,(n=1—15):");
scanf("%d",&n);

if((n!=0)&&(n<=15)&&(n%2!=0)) //这里就是判断是否为1至15的奇数了,因为你这个魔方算法只适合于奇数
p=0;

for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
a[i][j]=0; //这里是数组初始化,你也懂的
j=n/2+1;
a[1][j]=1; //这里是将1放在矩阵的第一行的中间位置
for(k=2;k<=n*n;k++)
{
i=i-1;
j=j+1; // 从2开始直到n×n止各数依次按下列规则存放:按 45°向右上方向行走,也即行数减一,列数加一
if((i<1)&&(j>n)) //这里是判断是否到了第1行第n列时,如果是,将下一个数放到上一个数的下面
{
i=i+2;
j=j-1;
}
else //如果不是,又有以下情况
{
if(i<1)i=n; //如果行数到了第一列,那么回绕,即放在最后一行
if(j>n)j=1; //如果列数到了最后一列,那么同样回绕,即放在第一列
}
if(a[i][j]==0) //如果按上面规则确定的位置上没有数,那么就放在该位置
a[i][j]=k;
else //如果按上面规则确定的位置上已有数,那么也是将下一个数放到上一个数的下面
{
i=i+2;
j=j-1;
a[i][j]=k;
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("%5d",a[i][j]); //将阵列输出,这个你懂的
printf("\n");
}
printf("\n\n");

}

热心网友 时间:2023-08-03 03:36

下面运行通过,只不过不知道是否符合你的格式,代码如下:

#include<stdio.h>

void main()

{

int num=-1;

int q=0,t[5];

int a=0,b=0,c=0,d=0,e=0;

int i=0,j=0;

int count=0,temp=0;

char p;

printf("***********************************************\n");

printf("(1、赵**  2、钱**  3、孙**   4、李**  5、周**)\n");

while(num!=6)

 {

 printf("请输入选号:"); 

 scanf("%d",&num);

  if(num==0)

   q++;

  else

   switch(num)

    {

    case 1:a++;break;

    case 2:b++;break;

    case 3:c++;break;

    case 4:d++;break;

    case 5:e++;break;

    default:break;

    }

 }

count=a+b+c+d+e+q;

t[0]=a;

t[1]=b;

t[2]=c;

t[3]=d;

t[4]=e;

printf("hello\n");

printf("赵有%d票\n钱有%d票\n孙有%d票\n李有%d票\n周有%d票\n弃权有%d票\n总共有%d人投票(包括弃权的)\n",a,b,c,d,e,q,count);

for(i=0;i<5;i++)

 for(j=0;j<5-i;j++)

  if(t[j]<t[j+1])  /*选票排序*/

   {

    temp=t[j];

    t[j]=t[j+1];

    t[j+1]=temp;

   }

for(i=0;i<3;i++)  /*输出前三甲*/ 

 {

  if(t[i]==a)

   printf("赵 是第%d名,共%d票\n",i+1,a);

  if(t[i]==b)

   printf("钱 是第%d名,共%d票\n",i+1,b);

  if(t[i]==c)

   printf("孙 是第%d名,共%d票\n",i+1,c);

  if(t[i]==d)

   printf("李 是第%d名,共%d票\n",i+1,d);

  if(t[i]==e)

   printf("周 是第%d名,共%d票\n",i+1,e);

 }

}

运行结果如图:

热心网友 时间:2023-08-03 03:37

你好,首先你要搞清楚魔方阵的排列规律,我看了下你的程序,只是针对奇数来排列的,而魔方阵的奇数排列规律就是:
(1)
将1放在第一行中间一列;
(2)
从2开始直到n×n止各数依次按下列规则存放:

45°方向向右上走,每一个数存放的行比前一个数的行数减1,列数加1;
(3)
如果行列范围超出矩阵范围,则回绕。
例如1在第1行,则2应放在最下一行,列数同样加1;
又如某个数在第n列,则下一个数应放在第一列,行数同样减1;
(4)
如果按上面规则确定的位置上已有数,或上一个数是第1行第n列时,则把下一个数放在上一个数的下面。
知道了排列规律,就好办了,程序注释如下:
#include
<stdio.h>
void
main()
{
int
a[15][15];
int
i,j,k,p,n;
p=1;
while
(p=1)
//我觉得这里应该是p==1,否则p=1是赋值语句,导致while判断没有效果,会一直循环
{
printf("请输入n,(n=1—15):");
scanf("%d",&n);
if((n!=0)&&(n<=15)&&(n%2!=0))
//这里就是判断是否为1至15的奇数了,因为你这个魔方算法只适合于奇数
p=0;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
a[i][j]=0;
//这里是数组初始化,你也懂的
j=n/2+1;
a[1][j]=1;
//这里是将1放在矩阵的第一行的中间位置
for(k=2;k<=n*n;k++)
{
i=i-1;
j=j+1;
//
从2开始直到n×n止各数依次按下列规则存放:按
45°向右上方向行走,也即行数减一,列数加一
if((i<1)&&(j>n))
//这里是判断是否到了第1行第n列时,如果是,将下一个数放到上一个数的下面
{
i=i+2;
j=j-1;
}
else
//如果不是,又有以下情况
{
if(i<1)i=n;
//如果行数到了第一列,那么回绕,即放在最后一行
if(j>n)j=1;
//如果列数到了最后一列,那么同样回绕,即放在第一列
}
if(a[i][j]==0)
//如果按上面规则确定的位置上没有数,那么就放在该位置
a[i][j]=k;
else
//如果按上面规则确定的位置上已有数,那么也是将下一个数放到上一个数的下面
{
i=i+2;
j=j-1;
a[i][j]=k;
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("%5d",a[i][j]);
//将阵列输出,这个你懂的
printf("\n");
}
printf("\n\n");
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
你家的水龙头起泡器该换了 如何打开水龙头起泡器 网上卖门锁,安装如何解决 广告装潢需要哪些设备 广告制作需要哪些材料 开锦旗招牌广告制做店须要什么 广告店需要哪些耗材 长安之星发动机水泵要坏之前声音怎么判断 家有孕妇咋调理:280天贴心呵护生健康宝贝图书信息 哪些是适合孕妇看的书 c语言 五阶魔方阵 5阶魔方阵,怎样用matlab验证各行、各列、主副对角线和相等? 这个程序错在那,输出五阶魔方阵 麻辣烫、自助火锅、米线那个项目更好些? 在县城里,整体消费水平一般... 在自助赚钱么?过桥米线和自助哪个回收成本快? 自助餐里增加米线项目大家会喜欢吗? 15元自助米线可以点几个鱼丸? 怎样克服在公众场合说话时的紧张感 公众场合发言恐惧,如何解决 怎样才能克服在公众前讲话紧张的问题? 怎样克服在公众面前讲话的紧张心理? 怎么样克服公共场合发言的紧张感? 怎样克服在公共场合讲话紧张? 150G的铜板纸A3大小有多重 A3规格80G 铜版纸 struts2+jquery判断用户是否存在 原来简单就会快乐,,这是哪首歌的歌词 “简单就是快乐”的名人事例三个! 奥特曼格斗进化0教程怎么过 奥特曼格斗进化0的剧情帝国星人怎么过 这个程序的功能是输出5*5魔方阵,请问错在哪了? 怎么解五阶幻方,求详细易懂的过程 C语言:输出魔方阵 用C语言,输出“魔方阵” 用C语言输出“魔方阵” c语言输出魔方阵程序解释 5阶幻方的填法 输出魔方阵C语言程序 五阶幻方的解法 c语言输出魔方阵,所谓魔方阵是指这样的方阵,她的每一行,每一列和对角线之和相 用25个数造一个五阶幻方 输出魔方阵,魔方阵是指这样的方阵,它的每一行,每一列和对角线之和均相等 橙色毛衣咖啡色衬衣领配什么颜色外套好看 柴油发电机组品牌都有哪些? 广东那里能买到柴油发电机400kw 的 广东柴油发电机组320kw价格多少钱 广东柴油发电机涡轮增压器损坏的原因 广东备用柴油发电机价格多少钱(400KW、600KW、800KW) 广东备用柴油发电机价格多少钱 他知道风从哪个方向来男主死了吗