C语言日常练习 Day16

目录

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

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

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


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

通过观察上图,我们不难发现,主对角线的数组都是arrii

代码如下:

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

运行结果如下:

相关推荐
无相求码8 分钟前
指针的5层境界,从入门到劝退:C语言指针进阶全解析
c语言
zander25826 分钟前
114. 二叉树展开为链表
数据结构·链表·深度优先
变量未定义~1 小时前
最小生成树1(Prim模板)、最小生成树2(kruskal模板)、最近公共祖先(模板)
算法
这就是佬们吗1 小时前
Python入门⑤-异常处理、文件操作与实战项目
开发语言·数据库·python·算法·pycharm
LONGZETECH1 小时前
新能源汽车充电设备装配与调试仿真教学软件 技术架构与核心实现解析
大数据·算法·3d·unity·架构·汽车
自学小白菜1 小时前
关于提升机器学习算法做预测回归任务精度的方法分享
算法·机器学习·回归·提升精度
C++ 老炮儿的技术栈1 小时前
基于MFC+原生GDI手动自绘仪表盘控件
c语言·c++·visual studio·控件·工业控制·gdi·自绘
学废了wuwu1 小时前
从入门到实战:深入浅出模型压缩三大核心——剪枝、彩票假设与知识蒸馏
人工智能·算法·剪枝
小肝一下1 小时前
3. 单链表
c语言·数据结构·c++·算法·leetcode·链表·dijkstra
劈星斩月1 小时前
监督学习算法 之 决策树
学习·算法·决策树