用C语言编程打印出由1到n^2的自然数构成的魔方阵,n由键盘输入。魔方阵的每一行每一列和对角线均相等。
奇数魔方阵就是将数字排列在nxn(n为奇数)的方阵上,要求满足各行、各列与各对角线的和相同。如下图所示,是n=5的奇数魔方阵。
填魔方阵的方法以奇数魔方阵最为简单,第一个数字放在第一行的正中央(填了1),然后向右(左)上填,如果右(左)上已有数字,则向下填,如下图所示:
一般程序语言的阵列多由0开始,为了计算方便,我们利用索引1到n的部份,而在计算是向右(左)上或向下时,我们可以将索引值除以n值,如果得到余数为1就向下,否则就往右(左)上。
4N 魔方阵
与奇数魔术方阵相同,在于求各行、各列与各对角线的和相等,不同的是这次方阵的维度是4的倍数。
先来看看4X4方阵的解法:
简单的说,就是一个从左上由1依序开始填,但遇对角线不填,另一个由左上由16开始填,但只填在对角线,再将两个合起来就是解答了。如果N大于等于2,则以 4X4为单位画对角线,如下所示:
至于对角线的位置该如何判断,有两个公式,有兴趣的可以画图印证,如下:
左上至右下:j % 4 == i % 4
右上至左下:(j % 4 + i % 4) == 1
8阶魔方阵(N=2)的结果如下:
魔方阵是用来锻炼学生的对二维数组元素的精确控制能力的。算法如下
魔方阵的排列规律如下:
⑴将1放在第一行中间一列;
⑵从2开始直到n×n止各数依次按下列规则存放;每一个数存放的行比前一个数的行数减1,列数加1(例如三阶魔方阵,5在4的上一行后一列);
⑶如果上一个数的行数为1,则下一个数的行数为n(指最下一行);例如1在第一行,则2应放在最下一行,列数同样加1;
⑷当上一个数的列数为n时,下一个数的列数应为1,行数减去1。例如2在第3行最后一列,则3应放在第二行第一列;
⑸如果按上面规则确定的位置上已有数,或上一个数是第一行第n列时,则把下一个数放在上一个数的下面。例如按上面的规定,4应该放在第1行第2列,但该位置已经被占据,所以4就放在3的下面;
#include <malloc.h>int main()
{
int i, j, n, row, col;
int **a;
printf("please input n:");
scanf("%d",&n);
a = (int**)malloc(sizeof(int*)*n);
for(i = 0; i != n; i++)
{
*(a+i) = (int*)malloc(sizeof(int)*n);
}
col = n / 2;
row = 0;
for(i = 1; i <= n*n; i++)
{
if(row == -1)
row = n - 1;
if(col == n)
col = 0;
a[row][col] = i;
if(i % n == 0)
row++;
else
{
row--;
col++;
}
}
for(i = 0; i < n; i++)
{
for(j = 0; j < n; j++)
printf("%-5d", a[i][j]);
printf("\n");
}
return 0;
}
#include<stdio.h>
void main()
{
int i,j,n,row,col,a[11][11];
printf("please input n:");
scanf("%d",&n);
col = n/2;
row = 0;
for(i=1;i<=n*n;i++)
{
if(row==-1)
row=n-1;
if(col==n)
col=0;
a[row][col]=i;
if(i%n==0)
row++;
else
{
row--;
col++;
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%-5d",a[i][j]);
printf("\n");
}
}
//测试结果:
用C语言编程:打印由字符A、B、C、D组成的所有全排列。
count++;} } 运行程序时输入ABCD即可本程序可以输入任意字符序列。如12345等。
用C语言编程打印出由1到n^2的自然数构成的魔方阵,n由键盘输入。魔方阵的...
} \/*---打印结果---*\/ free(piNumber);return 0;}
用C语言编程:打印由字符A、B、C、D组成的所有全排
void main(){ int i,j,m,n;char a[4] = {'A','B','C','D'};for (i = 0; i < 4; ++i){ for (j = 0; j < 4; ++j){ if (i == j) continue;for (m = 0; m < 4; ++m){ if ((i == m)||(j == m)) continue;for (n = 0; n < 4; ++n){ i...
c语言:从键盘输入0~9中的任意三个数 打印出由这三个数字组成的所有的数...
void main(){int i,j,k,s[3];printf("请输入0~9中的任意三个数:\\n");for(i=0;i<3;i++){scanf("%d",&s[i]);};printf("你输入的数为\\n%d\\t%d\\t%d\\t\\n",s[0],s[1],s[2]);printf("结果为:\\n");for(i=0;i<3;i++){for(j=0;j<3;j++){if(j==i) contin...
用C语言如何编程打印出由1到n^2的自然数构成的魔方阵,?
填魔方阵的方法以奇数魔方阵最为简单,第一个数字放在第一行的正中央(填了1),然后向右(左)上填,如果右(左)上已有数字,则向下填,如下图所示:一般程序语言的阵列多由0开始,为了计算方便,我们利用索引1到n的部份,而在计算是向右(左)上或向下时,我们可以将索引值除以n值,如果得到余数为1...
C语言 编写一个程序,用户输入一个整数n后打印出由* '号组成的n行n列的...
int n,i,j;printf("请输入数字:");scanf("d%",&n);for(i=0;i<n;i++){ for(j=0;j<n;j++){ printf("* ");} printf("\\n");} 插进去就ok了
C语言编程 打印数字字符图案 输入任意整数n,输出n行由数字构成的三角形...
C语言程序如下:includestdio.h intmain(){ inta=0;\/\/从0开始。intn;\/\/输入的行数,每行的字符数 scanf(%d,n);while(n)\/\/括号内n表示n!=0.{ inti;for(i=0;in;i++)\/\/\/注意n随着while循环变化的,n在不停的减少,{ a++;printf(a+“);\/\/每个字符后面都有一个空格。} n--;prin...
在C语言中如何实现用键盘输入一个字符串,并打印出来?
在C语言中输入字符串后然后打印出来的编程方法如下:1.首先需要先定义一个存放字符串的数组空间,如给字符串100个数组空间。2.接着使用gets()函数来获取键盘输入的字符串。一般格式为gets(定义的字符数组名)。3.然后再使用puts()函数来输出之前输入的字符串内容。一般格式puts(定义的字符数组名)。4....
用C语言编程:从键盘输入N,输出一个由*组成的N行的等腰三角形_百度知 ...
include<stdio.h> void main(){ int i, j ,n;printf("请输入n的值: \\n");scanf_s("%d",&n);for(i = 1; i <= n; i++){ for(j = 1; j <= n-i+1; j++){ printf(" ");} for(; j <= n+i; j++){ printf("*");} printf("\\n");} } ...
c语言编程题:本程序演示打印出如下图案
}return 0;}按照这个参考下吧。 本回答由提问者推荐 举报| 答案纠错 | 评论 4 2 争议什么67 采纳率:38% 来自团队:编程中国风 擅长: 动漫 C\/C++ VC++ 音频\/歌曲共享 其他回答 很简单,自己写吧。 周建国伟 | 发布于2013-05-06 举报| 评论 0 2 很简单。空格用“”打印出,星的个数就用循环...
鲍田诺森: //WindowsXP VC++6.0 #include<stdio.h> int main() { int buf[256][256]={0}; int i=0,j=0,n,count; scanf("%d",&n); count=buf[0][0]=1; while(count<n*n) { while(j+1<n&&!buf[i][j+1]) buf[i][++j]=++count; while(i+1<n&&!buf[i+1][j]) buf[++i][j]=++count; while(j...
吉安市18612888508: 用C语言编程打印出由1到n^2的自然数构成的魔方阵,n由键盘输入.魔方阵的每一行每一列和对角线均相等.?
鲍田诺森: #include<stdio.h>void main(){ int i,j,n,row,col,a[11][11]; printf("please input n:"); scanf("%d",&n); col = n/2;row = 0; for(i=1;i<=n*n;i++) { if(row==-1) row=n-1; if(col==n) col=0; a[row][col]=i; if(i%n==0) row++; else { row--; col++; } } for(i=0;i<n;i++) { ...
吉安市18612888508: 用C语言求:打印出由1到n平方的自然数的魔方阵 - ?
鲍田诺森: #include"stdio.h" main() {int a[20][20],i,j,k,p=1,m,n;while(p==1){printf("Enter n(n=1--19):");scanf("%d",&n);if(n>0&&n<=19&&n%2!e799bee5baa6e78988e69d8331333234313336=0)p=0;}for(i=1;i<=n;i++)for(j=1;j<=n;j++)a[i][j]=0; ...
吉安市18612888508: 急!!!怎么用C语言编写程序,用函数完成:计算从1开始到n的自然数的和??? - ?
鲍田诺森: C语言是普适性最强的一种计算机程序编辑语言,它不仅可以发挥出高级编程语言的功用,还具有汇编语言的优点,计算和的方法为: 1、新建一个求1到100自然数之和项目. 2、添加一个cpp文件. 3、包含需要用到的头文件. 4、输入main函数. 5、定义两个变量,分别是:a和sum. 6、使用while语句计算1到100之间所有自然数之和. 7、运行程序,打印出结果. 注意事项: C语言的语法限制不太严格,对变量的类型约束不严格,影响程序的安全性,对数组下标越界不作检查等.从应用的角度,C语言比其他高级语言较难掌握.也就是说,对用C语言的人,要求对程序设计更熟练一些.
吉安市18612888508: 写程序,输入一个数n,并打印出1到数 n的和!? (用c语言代码写) - ?
鲍田诺森: #include<stdio.h> int main(){int i,n,k=0;printf("输入一个数n:");scanf("%d",&n);for(i=1;i<=n;i++)k=k+i;printf("%d",k);} 如果还有问题可以追问,希望得到采纳哈
吉安市18612888508: 打印魔方阵 编程打印出由1到n^2的自然数构成的魔方阵,n由键盘输入.魔方阵每行每列与对角线和均相等. - ?
鲍田诺森: #include <stdio.h>#include <malloc.h> int main() { int i, j, n, row, col; int **a;printf("please input n:"); scanf("%d",&n); a = (int**)malloc(sizeof(int*)*n); for(i = 0; i != n; i++) { *(a+i) = (int*)malloc(sizeof(int)*n); }col = n / 2;row = 0; for(i = 1; i <= n*n;...
吉安市18612888508: C语言简单题?
鲍田诺森: 所谓的魔方距阵就是一种特殊的奇数阶方阵:它的行,列,对角线,上的数字之和都要相等,且方阵中的每一个数字都不相等,且数字的范围都在1到n*n之间. 我编的程序如下: */ #include<stdio.h> #define N 15 void main() { int i,j,row,cloum,size,...
吉安市18612888508: 用C语言编程打印十进制数1到256的二进制、八进制和十六进制数值表 - ?
鲍田诺森: //---------------------------------------------------------------------------#include <stdio.h>#include <limits.h> void bit_print(long int a) { int i; int n=sizeof(long int)*CHAR_BIT; int mask=1<<(n-1); for (i=1; i<=n; ++i) { putchar(((a&mask)==0)?'0':'1'); a<<=1; if (i%CHAR...
吉安市18612888508: c语言中 打出1到一千中个位数的立方等于其本身的数,谢谢啊 - ?
鲍田诺森: 我刚刚写的. 若有帮助,别忘了设为最佳回答哦,我在做任务. # includevoid main() { int i,a; for(i=1;i<=1000;i++) { a=i%10; if(a*a*a==i) printf("%d\n",i); } }
吉安市18612888508: 用C语言编程:从1到300的自然数中,完全不含有数字3的有多少个?将所有含3的数字打印出来. - ?
鲍田诺森: 多谢sixiaoguai提醒.打惯C++了,一时改不过来.呵呵#include<stdio.h> int main() { int n=300,i; int counter=0; for(i=1; i<n; ++i) {//只需枚举1~299中的数字就行了,且不用判断百位数字,因为百位数字一定不是3//枚举完后要单独输出300 if(i%10==3 || (i/10)%10 == 3) printf("%d\n",i); else ++counter; } printf("300\n");printf("完全不含数字3的有:%d个\n",counter); return 0; }