C语言日常练习 Day16

目录

一、求一个3*3的整型矩阵对角线元素之和

二、有一个已经排序好了的数组,要求输入一个数后,按原来排序的规律将它插入数组中

三、输出"魔方阵",所谓魔方阵是指它的每一行、每一列和对角线之和均相等


一、求一个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;
}

运行结果如下:

相关推荐
mit6.82425 分钟前
固定中间
算法
老马啸西风33 分钟前
成熟企业级技术平台 MVE-010-跳板机 / 堡垒机(Jump Server / Bastion Host)
人工智能·深度学习·算法·职场和发展
FMRbpm38 分钟前
用队列实现栈
数据结构·c++·新手入门
fei_sun44 分钟前
【数据结构】2021年真题
数据结构
立志成为大牛的小牛1 小时前
数据结构——五十九、冒泡排序(王道408)
数据结构·学习·程序人生·考研·算法
s09071361 小时前
下视多波束声呐进行测绘作业注意事项
算法·海洋测绘·下视多波束
wangjialelele1 小时前
git工作原理、个人使用到多人协作开发与git FLOW模型
c语言·c++·git·团队开发·个人开发
君义_noip1 小时前
信息学奥赛一本通 1640:C Looooops
c语言·数论·信息学奥赛·csp-s
papership1 小时前
【入门级-数据结构-3、特殊树:完全二叉树的定义与基本性质】
数据结构·算法