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;
}

运行结果如下:

相关推荐
?abc!4 小时前
缓存(5):常见 缓存数据淘汰算法/缓存清空策略
java·算法·缓存
BioRunYiXue4 小时前
一文了解氨基酸的分类、代谢和应用
人工智能·深度学习·算法·机器学习·分类·数据挖掘·代谢组学
Dddle14 小时前
C++:this指针
java·c语言·开发语言·c++
不見星空5 小时前
2025年第十六届蓝桥杯软件赛省赛C/C++大学A组个人解题
c语言·c++·蓝桥杯
jiunian_cn5 小时前
【c++】异常详解
java·开发语言·数据结构·c++·算法·visual studio
梁下轻语的秋缘5 小时前
每日c/c++题 备战蓝桥杯(洛谷P1387 最大正方形)
c语言·c++·蓝桥杯
工藤新一¹6 小时前
蓝桥杯算法题 -蛇形矩阵(方向向量)
c++·算法·矩阵·蓝桥杯·方向向量
Levin__NLP_CV_AIGC6 小时前
解决pip安装PyPI默认源速度慢
算法·pip
康康这名还挺多7 小时前
鸿蒙HarmonyOS list优化一: list 结合 lazyforeach用法
数据结构·list·harmonyos·lazyforeach
Helibo447 小时前
GESPC++六级复习
java·数据结构·算法