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

运行结果如下:

相关推荐
yuanManGan1 小时前
数据结构漫游记:静态链表的实现(CPP)
数据结构·链表
罗伯特祥1 小时前
C调用gnuplot绘图的方法
c语言·plot
嵌入式科普2 小时前
嵌入式科普(24)从SPI和CAN通信重新理解“全双工”
c语言·stm32·can·spi·全双工·ra6m5
火星机器人life2 小时前
基于ceres优化的3d激光雷达开源算法
算法·3d
虽千万人 吾往矣2 小时前
golang LeetCode 热题 100(动态规划)-更新中
算法·leetcode·动态规划
arnold663 小时前
华为OD E卷(100分)34-转盘寿司
算法·华为od
ZZTC3 小时前
Floyd算法及其扩展应用
算法
lqqjuly4 小时前
特殊的“Undefined Reference xxx“编译错误
c语言·c++
lshzdq4 小时前
【机器人】机械臂轨迹和转矩控制对比
人工智能·算法·机器人
2401_858286115 小时前
115.【C语言】数据结构之排序(希尔排序)
c语言·开发语言·数据结构·算法·排序算法