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

运行结果如下:

相关推荐
肥猪猪爸1 小时前
使用卡尔曼滤波器估计pybullet中的机器人位置
数据结构·人工智能·python·算法·机器人·卡尔曼滤波·pybullet
linux_carlos1 小时前
环形缓冲区
数据结构
readmancynn1 小时前
二分基本实现
数据结构·算法
萝卜兽编程1 小时前
优先级队列
c++·算法
Bucai_不才1 小时前
【数据结构】树——链式存储二叉树的基础
数据结构·二叉树
盼海1 小时前
排序算法(四)--快速排序
数据结构·算法·排序算法
一直学习永不止步2 小时前
LeetCode题练习与总结:最长回文串--409
java·数据结构·算法·leetcode·字符串·贪心·哈希表
Rstln2 小时前
【DP】个人练习-Leetcode-2019. The Score of Students Solving Math Expression
算法·leetcode·职场和发展
芜湖_2 小时前
【山大909算法题】2014-T1
算法·c·单链表
珹洺2 小时前
C语言数据结构——详细讲解 双链表
c语言·开发语言·网络·数据结构·c++·算法·leetcode