c语言中n阶魔方中的问题,详情请进,满足要求再追分
#include
#define N 16 //N可修改
int main()
{
int a[N][N]={0},i,j,k,p,m,n;
p=1;
while(p==1)
{
printf("Enter n(1~%d): ",N-1);
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((in))
{
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("
");
}
return 0;
}
/*15 阶内奇数魔方阵C程序*/
#include
main()
{
int a[16][16],i,j,m,n;
printf("
请输入阶数");
IN: scanf("%d",&n);
if (n>15 ) goto IN ;
if(0==n%2) n++;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
a[i][j]=0;
i=1; j=n/2 +1;
a[i][j]=1;
for(m=2;m<=n*n;m++)
{ i--; j++;
if (j>n && i<1)
{ i=2 ; j=n ; }
else
if(i<1) i=n ;
if(j>n) j=1;
if (a[i][j]!=0)
{
i=i+2; j= j-1;}
a[i][j]=m;
}
for(i=1;i<=n;i++)
{ for(j=1;j<=n;j++)
printf(" %4d",a[i][j]);
printf("
");
}
getch();
}
if (a[(i+n-1)%n][(j+1)%n]==0)
/*判断下一个位置是否已经排了数,如果为0,则没有排,位置空,这时可以把r的值放上去。*/
{
i=(i+n-1)%n; /*把该位置行数值赋给i*/
j=(j+1)%n; /*把该位置列数值赋给j*/
a[i][j]=r; /*把r值排到该位置上*/
}
else /*如果下一位置不为0,则已安排了其它数,这时只能把r值安排在上一个数的下方的位置*/
{
i=(i+1)%n;/ *行数+1 */
a[i][j]=r; /*把r值放到该位置*/
}
这里要说的是行数上移一层,用(i-1+n)%n,取余,之所以加n是不让行数值为负值,加n不会影响余数。而列数加1不会出现负的情况,所以不用加n。
魔方阵的排列规律如下:
(1)将1放在第一行中间一列;
(2)从2开始直到n×n止各数依次按下列规则存放;每一个数存放的行比前一个数的行数减1,列数加1(例如上面的三阶魔方阵,5在4的上一行后一列);
(3)如果上一个数的行数为1,则下一个数的行数为n(指最下一行);例如1在第一行,则2应放在最下一行,列数同样加1;
(4)当上一个数的列数为n时,下一个数的列数应为1,行数减去1。例如2在第3行最后一列,则3应放在第二行第一列;
(5)如果按上面规则确定的位置上已有数,或上一个数是第一行第n列时,则把下一个数放在上一个数的下面。例如按上面的规定,4应该放在第1行第2列,但该位置已经被占据,所以4就放在3的下面;
几个简单的matlab程序编写~~求帮助·
b=lcm(m,n);%最小公倍数 y=gcd(m,n);%最大公约数 end (1-2):function t=sushu(n)m=floor(sqrt(n));for i=2:m if mod(n,i)==0 t=0;break;else t=1;end end end (2):可以一次算出每一项,发现他们都是同一个值,这个值的求法:SUM=sum(1:n^2)\/n;%n阶魔幻阵...
魔方阵的C语言
p==1){printf(Enter n(1~%d): ,N-1);\/*可以输入小于等于N-1的奇数*\/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;...
魔方中的U,R,L表示什么
摘要:很多朋友都会玩三阶魔方,但是如果想要玩更高阶魔方,或者深入了解魔方知识,那么需要了解魔方的基本术语,专业术语是学习魔方的一大障碍,比如魔方中的U,R,L表示什么?WCA是什么意思?Rubik’sCube、CFOP分别代表什么?可能大多数朋友都一知半解,关于魔方术语,接下来为大家介绍一些魔方的常见术语,...
魔方的计算公式是什么?
2、底角归位,就是复原魔方第一层四个角块。3、第二层棱块归位,就是复原魔方中层四个棱块的步骤。4、顶棱面位,也称顶部架十字,就是魔方四个顶棱块与顶面色相同的面全部调至顶面。在这一步里,还原步骤会在前面提到的4种情况里从左到右之间切换,也就是说,当遇到“点”的时候,做完动作后...
求c语言 输出 1到n^2的自然数构成的魔方阵。
魔方阵的排列规律如下:⑴将1放在第一行中间一列;⑵从2开始直到n×n止各数依次按下列规则存放;每一个数存放的行比前一个数的行数减1,列数加1(例如三阶魔方阵,5在4的上一行后一列);⑶如果上一个数的行数为1,则下一个数的行数为n(指最下一行);例如1在第一行,则2应放在最下...
魔方有几个方块?
您好,一般的三阶魔方有6个中心块,12个棱块,8个角块,加起来一共是26块,如果您说的不是三阶魔方,那么您可以推算一下:n阶魔方有6(n-2)^2个中心块,8个角块,12(n-2)个棱块,您的魔方是几阶魔方,就把那个数代入n就行了。
用C语言编程打印出由1到n^2的自然数构成的魔方阵,n由键盘输入。魔方阵的...
.初始化 创建n*n方阵(n为奇数), 并以0填充 以整数h表示方阵列, v表示方阵行 h = n-1 v = n\/2 .初始化完毕 .定义 当前: 当前方阵行列位置(v, h)下一: 下一方阵行列位置(v+1, h+1).定义完毕 .开始 1. 判断: 数是否填完 是: 结束 否: ...
用c语言程序编写的1到n的平方的魔方阵运行的结果是什么
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\\n"); } }我举个例子:3介魔方阵8 1 63 5 74 9 2就是每一行,每一列和对角线这和都相等 ...
关于C语言编奇数阶魔方阵的问题
以下是我的源代码: #include"stdio.h" void main() { int a[15][15]={0}; int n,i,j,k,p,q; printf("请输入魔方阵的阶(仅限奇数阶)\\n"); scanf("%d",&n); i=0; j=(n\/2)+1; a[i][j]=1; for(k=2;k<=n*n;k++) { p=i; q=j; i--; j++; if(i<=... 展开 89...
c语言输出魔方阵,所谓魔方阵是指这样的方阵,她的每一行,每一列和对角...
include<stdio.h> define MAX 15 int a[MAX][MAX];int N;void magic();int main(){ int i,j ;do { printf("\\nshuru N:");scanf("%d",&N);if(N%2==0||N>15)printf("cuowu de N");else break;} while(1);magic();printf("the is %d*%d magic",N,N);printf(".....
严面刺五:[答案] #include #define N 15 void main() { int iArr[N][N] = {0}; /*魔法阵数组*/ /*定义变量,i,j为循环控制变,iNum表示数组的行数列数,iPox、iPoy分别代表数组的行数、列数,iPosx、iPosy分别代表保存数组行数变量,保存数组列数变量*/ int i = 0, j = 0, ...
黄平县15964047572: 求助C语言高手,关于魔方矩阵的问题?
严面刺五: #include <stdio.h> #include <conio.h> #define N 15 void main() { int iArr[N][N] = {0}; /*魔法阵数组*/ /*定义变量,i,j为循环控制变,iNum表示数组的行数列数,iPox、iPoy分别代表数组的行数、列数,iPosx、iPosy分别代表保存数组行数...
黄平县15964047572: c语言习题:输出n阶幻方.我的输出全是0,为什么?找出原因追加100分 - ?
严面刺五: int a[10][10]={0}要赋初值,另外if(a[j][k]=0)continue;这一句=改为==,运行了一下还是实现不了,只能输出一个1,仔细看了一下发现你的算法不对,没有给所有空赋值, 奇数阶幻方的实现方式是(比如3阶的9个数):在第一行中间填入1,之...
黄平县15964047572: C语言输出n阶奇数的魔方阵,以三阶为例,发现只能输出到3 ,求解 - ?
严面刺五: 花了点时间,看了下代码,修改如下,望采纳:#include int main() { int s[50][50] = {0}; // 定义时直接初始化 int i, j, k, n, a, b; scanf ( "%d", &n ); /* // 定义时初始化,下面的初始化代码不需要 for ( i = 0; ifor ( j = 0; js[i][j] = 0; */ i = 0; j = ( ( n + 1 ) ...
黄平县15964047572: n阶魔方阵C语言 - ?
严面刺五: /*15 阶内奇数魔方阵C程序*/#include<stdio.h> main() { int a[16][16],i,j,m,n; printf("\n请输入阶数"); IN: scanf("%d",&n); if (n>15 ) goto IN ; if(0==n%2) n++; for(i=1;i<=n;i++) for(j=1;j<=n;j++) a[i][j]=0; i=1; j=n/2 +1; a[i][j]=1; for(m=2;m<=n*n;m++) { ...
黄平县15964047572: 求一个n阶魔方阵的算法用标准c语言的风格来做的 - ?
严面刺五: 对平面魔方的构造,分为三种情况:N为奇数、N为4的倍数、N为其它偶数(4n+2的形式) ⑴ N 为奇数时,最简单 (1) 将1放在第一行中间一列; (2) 从2开始直到n*n止各数依次按下列规则存放: 按 45°方向行走,如向右上 每一个数存放的行...
黄平县15964047572: C语言魔方阵问题??
严面刺五: 思路不对,这是我以前写的一个奇数阶魔方生成代码,lz可以参考一下: #include <stdio.h> #define N 3 // 三阶 int main() { int a[N][N] = { 0 }; int i, j, x, y, m, n; a[x=0][y=N/2] = 1; for ( i = 2; i <= N*N; ++i ) { m = x-1; n = y+1; if ( x == 0 ) m = N-1; if ( y == N-...
黄平县15964047572: C语言 检验魔方矩阵问题!!急求!!!!!! - ?
严面刺五: #include <stdio.h> #include <stdlib.h> int main() {int i,j,A[5][5],a=0,b=0,c=0,d=0;for(i=0;i<5;i++){for(j=0;j<5;j++){scanf("%d",&A[i][j]);}}for(i=0,j=0;j<5;j++)a=a+A[i][j];for(i=0,j=0;i<5&&j<5;i++,j++)c=c+A[i][j];if(c!=a){printf("It is not a ...
黄平县15964047572: c语言魔方阵问题! - ?
严面刺五: 魔方阵只能算奇数的.下面这个程序原本是从百度百科里找到的,不过发现百科里面那个程序原来有误,修改后终于可以了,给你,希望有帮助!!! #include <stdio.h> #define N 16 //N可修改 int main() { int a[N][N]={0},i,j,k,p,m,n; p=1; while(p==...
黄平县15964047572: c语言中的n阶方阵怎嘛做 - ?
严面刺五: C语言中int型的数值非常的小,最大的范围也只在[-2^31 , 2^31 -1],所以使用int类型最大只能表示13的阶乘而已,使用范围更大的double才是王道./* Note:Your choice is C IDE */#include "stdio.h" void main() { int i,n,flg; double num=1; printf("...