目录
二、有一个已经排序好了的数组,要求输入一个数后,按原来排序的规律将它插入数组中
三、输出"魔方阵",所谓魔方阵是指它的每一行、每一列和对角线之和均相等
一、求一个3*3的整型矩阵对角线元素之和
通过观察上图,我们不难发现,主对角线的数组都是arr[i][i]
代码如下:
cpp
#include <stdio.h>
int main()
{
int arr[3][3]={0};
int i,j,sum=0;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
scanf("%d",&arr[i][j]);
}
}
for(i=0;i<3;i++)
{
sum+=arr[i][i];
}
printf("%d",sum);
return 0;
}
运行结果如下:
二、有一个已经排序好了的数组,要求输入一个数后,按原来排序的规律将它插入数组中
代码如下:
cpp
#include<stdio.h>
int main()
{
int arr[6] = { 1,3,5,7,9};
int i,j;
for (i = 0;i < 5;i++)
printf("%d ", arr[i]);
printf("\n");
int num,tep1=0,tep2=0;
printf("请输入一个数:\n");
scanf_s("%d", &num);
if (num >= arr[4])//首先判断此数是否大于最后一个数
{
arr[5] = num;
}
else
{
for (i = 0;i < 5;i++)
{
if (arr[i] >= num)
{
tep1 = arr[i];
arr[i] = num;
for (j = i + 1;j < 6;j++)
//插入后此元素之后的数,依次后移一个位置。
{
tep2 = arr[j];
arr[j] = tep1;
tep1 = tep2;
}
break;
}
}
}
printf("插入后的序列:\n");
for (i = 0;i < 6;i++)
printf("%d ", arr[i]);
printf("\n\n\n");
}
运行结果如下:
三、输出"魔方阵",所谓魔方阵是指它的每一行、每一列和对角线之和均相等
解魔方阵问题的方法很多,这里采用如下规则生成魔方阵。
-
由1开始填数,将1放在第0行的中间位置。
-
将魔方阵想象成上下、左右相接,每次往左上角走一步,会有下列情况:
-
左上角超出上方边界,则在最下边相对应的位置填入下一个数字;
-
左上角超出左边边界,则在最右边相应的位置填入下一个数字;
-
如果按上述方法找到的位置已填入数据,则在同一列下一行填入下一个数字。
-
代码如下:
cpp
#include<stdio.h>
#include<stdlib.h>
void array(int n){
int i,j,max,no,num;
int *mtrx;
if(n%2==0) //如果n是偶数,则加1变奇数
n+=1;
max=n*n;
mtrx=(int *)malloc(max); //为魔方阵分配内存
mtrx[n/2]=1; //将1存入数组
i=0; //1所在行
j=n/2; //1所在***定从1之后每下一个数的位置,由当前数确定下一个数
for(num=2;num<=max;num++){
i=i-1;
j=j+1; //下一个数在当前数的上一行,右一列
if((num-1)%n==0){ //当前数是n的整倍数
i+=2;
j-=1;
}
if(i<0) //当前数在第0行时
i=n-1;
if(j>n-1) //当前数在最后一列
j=0;
no=i*n+j; //下一个数在数组中的最终位置
mtrx[no]=num;
}
//打印
printf("生成的%d魔方阵为:",n);
no=0;
for(i=0;i<n;i++){
printf("\n");
for(j=0;j<n;j++){
printf("%3d",mtrx[no]);
no++;
}
}
free(mtrx);
}
int main(){
int n;
printf("请输入n值:");
scanf("%d",&n);
array(n);
return 0;
}
运行结果如下: