首页 > 其他分享 >第八章: 8.10将一个5*5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素(四个角的元素的顺序是从左到右,从上到下,依次从小到大存放)

第八章: 8.10将一个5*5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素(四个角的元素的顺序是从左到右,从上到下,依次从小到大存放)

时间:2024-11-08 18:45:08浏览次数:3  
标签:tmp min ++ max 元素 个角 int printf 8.10

第八章: 8.10将一个5*5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素(四个角的元素的顺序是从左到右,从上到下,依次从小到大存放)

思考:

1.输入矩阵的值

int a[5][5] = { 0 };
    int i = 0, j = 0;
    printf("请输入一个5*5的数组:\n");
    for (i = 0; i < 5; i++)
    {
        for (j = 0; j < 5; j++)
        {
            scanf("%d", &a[i][j]);
        }
    }

2. 交换最大值最小值

二维数组在内存中连续存放

int* p = &a[0][0];
    change(p);

(1)找出最大值、最小值,并且交换

 for (i = 0; i < 5; i++)
    {
        for (j = i; j <5; j++)
        {
            if (*(p + 5 * i + j) > * max)
                max = p + 5 * i + j;
            if (*(p + 5 * i + j) < * min)
                min = p + 5 * i + j;
        }
    }
    int tmp = 0;
    tmp = *(p + 12);
    *(p + 12) = * max;
    * max = tmp;
    tmp = *p;
    *p = *min;
    *min = tmp;

(2)找出最小值,并且交换

 min = p + 1;
    for (i = 0; i < 5; i++)
    {
        for (j = 0; j < 5; j++)
        {
            if (((p + 5 * i + j)!=p) &&(*(p + 5 * i + j) < * min))
                min = p + 5 * i + j;
        }
    }
    tmp = *(p+4);
    *(p+4) = * min;
    * min = tmp;

3. 输出数组

printf("\n\n");
    for (i = 0; i < 5; i++)
    {
        for (j = 0; j < 5; j++)
        {
            printf("%d ", a[i][j]);
        }
        printf("\n");
    }

思考完毕,开始敲代码

//将一个5*5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素
//(四个角的元素的顺序是从左到右,从上到下,依次从小到大存放)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void change(int* p)
{
	int* max;
	max = p;
	int* min;
	min = p;
	int i = 0, j = 0;
	//找出最大值,并且交换给中间值
	for (i = 0; i < 5; i++)
	{
		for (j = i; j <5; j++)
		{
			if (*(p + 5 * i + j) > * max)
				max = p + 5 * i + j;
			if (*(p + 5 * i + j) < * min)
				min = p + 5 * i + j;
		}
	}
	int tmp = 0;
	tmp = *(p + 12);
	*(p + 12) = * max;
	* max = tmp;
	tmp = *p;
	*p = *min;
	*min = tmp;
	
	//找出最小值,并且交换给右上角的值
	min = p + 1;
	for (i = 0; i < 5; i++)
	{
		for (j = 0; j < 5; j++)
		{
			if (((p + 5 * i + j)!=p) &&(*(p + 5 * i + j) < * min))
				min = p + 5 * i + j;
		}
	}
	tmp = *(p+4);
	*(p+4) = * min;
	* min = tmp;
	//找出最小值,并且交换给左下角的值
	min = p + 1;
	for (i = 0; i < 5; i++)
	{
		for (j = 0; j < 5; j++)
		{
			if (((p + 5 * i + j) != (p + 4))&&((p + 5 * i + j) != p) && (*(p + 5 * i + j) < * min))
				min = p + 5 * i + j;
		}
	}
	tmp = *(p + 20);
	*(p + 20) = * min;
	* min = tmp;
	//找出最小值,并且交换给右下角的值
	min = p + 1;
	for (i = 0; i < 5; i++)
	{
		for (j = 0; j < 5; j++)
		{
			if (((p + 5 * i + j) != (p + 20))&& ((p + 5 * i + j) != (p + 4)) && ((p + 5 * i + j) != p)&&(*(p + 5 * i + j) < * min))
				min = p + 5 * i + j;
		}
	}
	tmp = *(p + 24);
	*(p + 24) = * min;
	* min = tmp;
}
int main()
{
	//输入矩阵的值
	int a[5][5] = { 0 };
	int i = 0, j = 0;
	printf("请输入一个5*5的数组:\n");
	for (i = 0; i < 5; i++)
	{
		for (j = 0; j < 5; j++)
		{
			scanf("%d", &a[i][j]);
		}
	}
	//交换最大值最小值
	int* p = &a[0][0];
	change(p);
	//输出数组
	printf("\n\n");
	for (i = 0; i < 5; i++)
	{
		for (j = 0; j < 5; j++)
		{
			printf("%d ", a[i][j]);
		}
		printf("\n");
	}
	return 0;
}

输出结果:

 

 

标签:tmp,min,++,max,元素,个角,int,printf,8.10
From: https://blog.csdn.net/2301_78189441/article/details/143481487

相关文章

  • JS操作元素
    一、事件基础事件概述JS使我们有能力创建动态页面,而事件是可以被JS侦测的行为简单理解:触发----响应机制网页中每个元素都可以产生某些可以触发JS的事件,例如点击事件事件是由三部分组成事件源事件类型事件处理程序称为事件三要素事件源:事件被触发的对象谁被触发事......
  • Leetcode 3235. 判断矩形的两个角落是否可达
    1classSolution{2public:3boolcanReachCorner(intxCorner,intyCorner,vector<vector<int>>&circles){4vector<bool>visited(circles.size(),false);56function<bool(int)>dfs=[&](inti)......
  • nodejs 18.20.4 juice 库将html中的全局CSS格式, 转化为每个元素内联的CSS格式
    执行下面命令,安装nodejs和npmubuntu@ubuntu22:~$sudoaptupdateubuntu@ubuntu22:~$sudoaptinstallnpm#npm是Node.js的包管理工具ubuntu@ubuntu22:~$sudoaptinstall-ycurlubuntu@ubuntu22:~$curl-fsSLhttps://deb.nodesource.com/setup_18.x|sudo-Eb......
  • 力扣21 打卡16 判断矩形的两个角落是否可达
    思路:首先,检查矩形的起点和终点是否在任何一个圆的范围内,如果是则不存在合法路径。接着,判断每个圆是否与矩形的左上角边界或右下角边界相交。对于与左上边界相交的圆,使用深度优先搜索(DFS),查找是否存在一组相连的圆,最终能连接到右下边界。若找到这样的路径,则矩形被封锁,返回Fa......
  • LeetCode 2535[数组元素和与数字和的绝对差值]
    题目链接LeetCode2535[数组元素和与数字和的绝对差值]详情实例提示题解思路遍历容器,依次求出数字和与元素和,然后求差值:通过getSun函数,求取元素的数字和 getSun函数的实现:  将其对10取余操作,获取的余数即为当前位的数字  然后再除以10,继续对其进行10的取......
  • flex 设置弹性盒子布局(使子元素动态的占据20%,30%,50%)
    默认情况下,flex值为1,也就是占用弹性容器剩余位置的1份使用flex修改弹性伸缩比的示例:<body><divclass="box"><divclass="itemitem1">1</div><divclass="itemitem2">2</div><divclass="i......
  • MRP元素数据
    在开发报表的过程中,需要对MD04后边的表数据里面的不同MRP元素字段理解清楚对应的。当时比较疑惑的是关于采购订单没有和工单显示在一列而是和预留/相关需求里面的数据在同一列。去查底表RESB 发现采购申请、采购凭证、采购订单都属于预留/相关需求。MRP元素数据放的是......
  • DICOM标准:重要概念——多种传输语法、私有数据元素标签、唯一标识符(UID)等详解
    1私有数据元素标  1.1 私有数据元素标签(PrivateDataElementTags)        在DICOM标准中,多个实现者可能会定义带有相同(奇数)组号码的私有数据元素标签。为了避免冲突,私有元素根据以下规则分配私有数据元素标签:  a)私有创作者数据元素的分配 编号为(gggg......
  • LeetCode题练习与总结:有序矩阵中第 K 小的元素--378
    一、题目描述给你一个 nxn 矩阵 matrix ,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。请注意,它是 排序后 的第 k 小元素,而不是第 k 个 不同 的元素。你必须找到一个内存复杂度优于 O(n^2) 的解决方案。示例1:输入:matrix=[[1,5,9],[10,11......
  • c语言中声明数组时, 元素个数必须使用常量表达式
     001、[root@PC1test]#lstest.c[root@PC1test]#cattest.c##测试程序#include<stdio.h>intmain(void){intvar1=5;//初始化一个变量var1intarray1[var1]={3,5,8,4,9};//初始化数组return0;}[......