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

c语言编辑魔方阵问题,我这个错在哪里

发布网友 发布时间:2023-11-05 04:59

我来回答

3个回答

热心网友 时间:2024-03-12 23:32

参考代码:

/******************
 * 魔方阵         *
 * Author:萢萢i3 *
 ******************/

#include <stdio.h>
#include <windows.h>

#define N 500


//建立奇阶魔方阵
void oddCubetastic(int n)
{
/********************************************************************************
 *创建方法:*
 *a、把1放在N*N方阵中的第一行中间一列,即放在位置为(1,(N+1)/2)*
 *b、后一个数存放的行数比前一个数存放的行数减1,若这个行数为0,则取行数为N*
 *c、后一个数存放的列数比前一个数存放的列数加1,若这个列数为N+1,则取列数为1*
 *d、如果前一个数是N的倍数,则后一个数存放的列数不变,而行数加1。*
 ********************************************************************************/

int a[N][N]={0};//方阵初始化
int i, j, k, num=0;

//方正排列的起始位置
j=(n-1)/2;
i=0;

//创建魔方阵
a[i][j]=1;//把1放在第一行的中间位置

for (k=2; k<=n*n; k++)
{
//规律1:上一个数在第1行最后一列时,则把这个数放在上一个数的正下方
if (i==0&&j==n-1)
{
i=i+1;
a[i][j]=k;//填入数据
continue;
}

//规律2:每一个数存放的行比前一个数的行减1,列数加1
i=i-1;
j=j+1;

//规律3:如果一个数的上一个数的行数为第1行,则这个数放在最后一行
if (i<0)
{
i=n-1;
}

//规律4:如果一个数的上一个数在最后一列,则这个数放在第1列
if (j>=n)
{
j=0;
}

//规律5:如果根据前面位置确定的位置已有数据,则把这个数放在上一个数的正下方
if (a[i][j]!=0)
{
i=i+2;
j=j-1;
}
a[i][j]=k;//填入数据
}

//输出魔方阵
printf("%d阶魔方阵:\n", n);
for (i=0; i<n; i++)
{
for (j=0; j<n; j++)
{
printf("%5d", a[i][j]);
}
num+=a[i][j-1];
printf("\n");
}
printf("判断值为:%d\n", num);
printf("\n\n");
}


//创建4*N式偶阶魔方阵
void evenCubetastic_1(int n)
{



/*****************************************************************************
 *                               创建方法: *
 *a. 先将1至N*N由小到大的顺序,从第一行开是依序填入N*N的方阵中 *
 *b. 然后将N*N的方阵以4行4列划分为若干个4*4的小方阵 *
 *c. 再将所有4*4小方阵的两个对角线上的数字划掉 *
 *d. 之后将所有被划掉的数字重新由大到小的进行排列 *
 *e. 然后再将这些数字按排列顺序由N*N方阵的第一行开始,放入被划掉的格子中去 *
  *则此时的偶幻方也就布好阵。 *
 *****************************************************************************/

int a[N][N]={0};//方阵初始化
int i, j, k=1, num=0;

//先顺序填入所有数据
for (i=0; i<n; i++)
{
for (j=0; j<n; j++)
{
a[i][j]=k++;
}
}


for (i=0; i<=n; )
{
for (j=0; j<n; j++)
{
if ( a[i][j]%4==0|| a[i][j]%4==1)
{
a[i][j]=k-a[i][j];
}
}

if (0==i%4)
{
i=i+3;
continue;
}
if (3==i%4)
{
i++;
continue;
}
}


//输出魔方阵
printf("%d阶魔方阵:\n", n);
for (i=0; i<n; i++)
{
for (j=0; j<n; j++)
{
printf("%5d", a[i][j]);
}
num+=a[i][j-1];
printf("\n");
}
printf("判断值为:%d\n", num);
printf("\n\n");
}


//创建4*N+2式偶阶魔方阵
void evenCubetastic_2(int n)
{


/****************************************************************************
 *                               创建方法:*
 *  将n=4*N+2的方阵划分为田字,分为四个小奇阶方阵,阶数为2*N+1,做以下标记:*
 *a. 左半两个小方阵中正中间的标记上*
 *b. 左半两个小方阵中除(N+1, 1)的格外,小于N+1的列标记上*
 *c. 右半两个小方阵中大于N+2的列标记上*
  *d. 用奇阶魔方阵的创建方式连续创建左上、右下、右上、左下四个小方阵*
 *e. 将标记的数据对调,即可得4*N+2的魔方阵*
 ****************************************************************************/

int a[N][N]={0};//方阵初始化
int i, j, k, num=0;

//方正排列的起始位置
j=(n/2-1)/2;
i=0;

//创建左上角的魔方阵
a[i][j]=1;//把1放在第一行的中间位置

for (k=2; k<=(n/2)*(n/2); k++)
{
if (i==0&&j==n/2-1)
{
i=i+1;
a[i][j]=k;
continue;
}

i=i-1;
j=j+1;

if (i<0)
{
i=n/2-1;
}

if (j>=n/2)
{
j=0;
}

if (a[i][j]!=0)
{
i=i+2;
j=j-1;
}
a[i][j]=k;
}


//方正排列的起始位置
j=(n+(n/2-1))/2;
i=n/2;

//创建右下角的魔方阵
a[i][j]=k;

for (k=k+1; k<=2*(n/2*n/2); k++)
{
if (i==n/2&&j==n-1)
{
i=i+1;
a[i][j]=k;
continue;
}

i=i-1;
j=j+1;

if (i<n/2)
{
i=n-1;
}

if (j>=n)
{
j=n/2;
}

if (a[i][j]!=0)
{
i=i+2;
j=j-1;
}
a[i][j]=k;

}

//方正排列的起始位置
j=(n+(n/2-1))/2;
i=0;

//创建右上角的魔方阵
a[i][j]=k;

for (k=k+1; k<=(n+n/2)*n/2; k++)
{
if (i==0&&j==n-1)
{
i=i+1;
a[i][j]=k;
continue;
}

i=i-1;
j=j+1;

if (i<0)
{
i=n/2-1;
}

if (j>=n)
{
j=n/2;
}

if (a[i][j]!=0)
{
i=i+2;
j=j-1;
}
a[i][j]=k;
}



//方正排列的起始位置
j=(n/2-1)/2;
i=n/2;

//创建左下角的魔方阵
a[i][j]=k;

for (k=k+1; k<=n*n; k++)
{
if (i==n/2&&j==n/2-1)
{
i=i+1;
a[i][j]=k;
continue;
}

i=i-1;
j=j+1;

if (i<n/2)
{
i=n-1;
}

if (j>=n/2)
{
j=0;
}

if (a[i][j]!=0)
{
i=i+2;
j=j-1;
}
a[i][j]=k;
}

//调整方阵使其成为魔方阵
int tmp;
for (i=0; i<n/2; i++)
{
for (j=0; j<(n-2)/4; j++)
{
if ((i==(n-2)/4)&&(j==0))
continue;
else
{
tmp=a[i+n/2][j];
a[i+n/2][j]=a[i][j];
a[i][j]=tmp;
}
}
if (i==(n-2)/4&&j==(n-2)/4)
{
tmp=a[i+n/2][j];
a[i+n/2][j]=a[i][j];
a[i][j]=tmp;
}
}

for (i=0; i<n/2; i++)
{
for (j=n/2-1; j<n; j++)
{
if (j>n/2-1+(n-2)/4+2)
{
tmp=a[i+n/2][j];
a[i+n/2][j]=a[i][j];
a[i][j]=tmp;
}
}
}


//输出魔方阵
printf("%d阶魔方阵:\n", n);
for (i=0; i<n; i++)
{
for (j=0; j<n; j++)
{
printf("%5d", a[i][j]);
}
num+=a[i][j-1];
printf("\n");
}
printf("判断值为:%d\n", num);
printf("\n\n");
}


//主函数
int main()
{
int n;
int i=0;

printf("求 3—N 之间的魔方阵,输入 N 的值:");
scanf("%d", &n);
printf("\n");

for (i=3; i<=n; i++)
{
if (i%2==1)
{
oddCubetastic(i);//求奇阶魔方阵
}
else
{
if (i%4==0)
{
evenCubetastic_1(i);//求4*N式偶阶魔方阵
}

if (i%4==2)
{
evenCubetastic_2(i);//求4*N+2式偶阶魔方阵
}
}
}

system("pause");//暂停程序便于查看
return 0;
}

热心网友 时间:2024-03-12 23:32

# include <stdio.h>
int main()
{
int i, j, k, n, temp1, temp2,a[15][15];
scanf("%d", &n);
for (i = 0; i <= n; i++)
for (j = 0; j <= n; j++)
a[i][j] = 0;

i = 0;
j = n / 2;
a[i][j] = 1;
for (k = 2; k <= n*n; k++)
{
if (i == 0) { temp1 = n - 1; }
else temp1 = i - 1;
if (j == n - 1) { temp2 = 0; }
else temp2 = j + 1;
if ((a[temp1][temp2] != 0) || (i == 0 && j == n)) { temp1 = i + 1; temp2 = j; }
i = temp1; j = temp2;
a[i][j] = k;
}
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
printf("%3d", a[i][j]);
}
printf("\n");
}
 return 0;
}

追问if(i=0){temp=n-1;}这句话为什么无法做判断

追答这是一个赋值表达式,把0赋值给i,然后表达式的值就是0,即为假,所以后面的语句永远也不会执行的。

热心网友 时间:2024-03-12 23:33

魔方好难啊
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
《Lycoris Recoil》泷奈千里走单骑救千束,她们还真有夫妻相 美少女、热兵器——起底《lycoris recoil》的流量密码 西方的饮茶礼仪 天津 大众卡 什么叫“大众卡是按天扣费的” iPhone发送短信技巧你知道吗 收不到手机短信验证码怎么解决? 人体一共有多少快骨头! 人体由多少块骨头组成其中头颅骨、躯干骨、四肢骨、各是多少._百度知 ... 电测量及电能计量装置设计技术规程内容简介 大家谁知道配电盘安装规范是什么 宁波到什么深圳怎么样去才方便啊? 关于C语言魔方阵3 从宁波到深圳坐什么交通工具便宜?大约多少钱? 你在玩电脑,正在看一个女明星?女生过来问你? 下班后,领导发来消息该怎么回复? ...长是9厘米,宽是6厘米.将它折成一个最大的正方形,边长是多少厘米... 在松树下捡白灰色蘑菇,叫什么名字?有没有毒? table tennis 是什么意思?急啊... 老板下班后发的消息,怎么回复? 请高手来解释下《沉默的羔羊》3 注册第二个方法 ...手机号码注册了两个之前那个微信怎么找回来 请问我第一个? 我是一16岁的成都女孩,不想读书,我能做什么? 如何让腐竹泡的能快一点? 干腐竹如何尽快泡软152 男生可以用OLAY吗?38 OLAY男士护肤系列15 vuex是什么 注册第二个方法 青岛碧桂园湖悦天境售楼处电话是多少? 如何更改? 我装office2010出现这种情况怎么办“无法验证此软件的...2 怎想知道男朋友还爱不爱我了 我该怎么跟他谈 腐竹怎么泡最快的速度7 olay men男士玉兰油怎么好像消失了一样,网店几乎找不到...1 沉默的羔羊里面当探员去采访杀人狂魔时为什么不让摸玻璃 如何注册第二个? 问下《沉默的羔羊》中的问题。。。。高手进7 什么叫野史,详细回答14 一年内怎么改第二次 我的好友怎么转移到别的上 上海侨懋投资管理有限公司怎么样? ...自己渣英语看了半天也不明白是什么意思,求大佬们帮一下,谢谢_百度... 高层施工,工人怎么上下楼 上海歆懋经贸发展有限公司怎么样? 飞蚊症真的不需要治疗吗? 得了飞蚊症需要治疗吗? 全麦面包算粗粮食品吗? 在领导下班之后发消息怎么回复比较好呢? 宝宝健康状况调查问卷