发布网友 发布时间: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
你好,首先你要搞清楚魔方阵的排列规律,我看了下你的程序,只是针对奇数来排列的,而魔方阵的奇数排列规律就是:热心网友 时间: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
你好,首先你要搞清楚魔方阵的排列规律,我看了下你的程序,只是针对奇数来排列的,而魔方阵的奇数排列规律就是: