二维数组(一)

问题描述:

任意给定一个n*n的矩阵,矩阵的行数与列数均为n。你的任务是通过行变换,使得矩阵每行元素的平均值按递增顺序排列。如果出现有的行平均值相同的情况,则按照原顺序输出。

输入与输出要求:

输入一个整数n代表矩阵的行数(列数),n的范围是1—100。然后输入n*n个整数,即此矩阵的元素。矩阵元素的绝对值不会超过1000000。输出经过行变换后的新矩阵。每行的每个元素用空格分隔,注意最后一个元素后为换行符。

程序运行效果:

Sample:
3↙
5 5 5↙
3 3 3↙
1 1 1↙

1 1 1
3 3 3
5 5 5

思路:

二维数组操作,排序算法

代码实现:

#include<stdio.h>
#include<stdlib.h>
int main()
{
	int n;
	scanf("%d",&n);
	int **a;
	a=(int**)malloc(sizeof(int*)*n);
	for(int i=0;i<n;i++)
	{
		a[i]=(int*)malloc(sizeof(int)*(n+1));
		for(int j=0;j<n;j++)
		{
			scanf("%d",&a[i][j]);
			a[i][n]+=a[i][j];
		}
	}
	
	for(int i=0;i<n-1;i++)
	{
		for(int k=0;k<n-1-i;k++) //冒泡排序 
		if(a[k][n]>a[k+1][n])
		{
			for(int j=0;j<=n;j++) //遍历每一行元素,相邻行元素交换 
			{
				int t;
				t=a[k+1][j];
				a[k+1][j]=a[k][j];
				a[k][j]=t;
			}
		}
	}
	/*或者:
	int *t;
	for(int i=0;i<n-1;i++)
	{
		for(int k=0;k<n-1-i;k++) //冒泡排序 
		if(a[k][n]>a[k+1][n])
		{
			t=a[k+1];
			a[k+1]=a[k];
			a[k]=t;
		}
	}
	*/
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
		{
			printf("%d ",a[i][j]);
		}
		printf("\n");
	}
	for(int i=0;i<n;i++)
	{
		free(a[i]);
	}
	free(a);
	a=NULL;
	return 0;
}
已标记关键词 清除标记
相关推荐
【为什么还需要学习C++?】 你是否接触很多语言,但从来没有了解过编程语言的本质? 你是否想成为一名资深开发人员,想开发别人做不了的高性能程序? 你是否经常想要窥探大型企业级开发工程的思路,但苦于没有基础只能望洋兴叹?   那么C++就是你个人能力提升,职业之路进阶的不之选。 【课程特色】 1.课程共19大章节,239课时内容,涵盖数据结构、函数、类、指针、标准库全部知识体系。 2.带你从知识与思想的层面从0构建C++知识框架,分析大型项目实践思路,为你打下坚实的基础。 3.李宁老师结合4大国外顶级C++著作的精华为大家推出的《征服C++11》课程。 【学完后我将达到什么水平?】 1.对C++的各个知识能够熟练配置、开发、部署; 2.吊打一切关于C++的笔试面试题; 3.面向物联网的“嵌入式”和面向大型化的“分布式”开发,掌握职业钥匙,把握行业先机。 【面向人群】 1.希望一站式快速入门的C++初学者; 2.希望快速学习 C++、掌握编程要义、修炼内功的开发者; 3.有志于挑战更高级的开发项目,成为资深开发的工程师。 【课程设计】 本课程包含3大模块 基础篇 本篇主要讲解c++的基础概念,包含数据类型、运算符等基本语法,数组、指针、字符串等基本词法,循环、函数、类等基本句法等。 进阶篇 本篇主要讲解编程中常用的一些技能,包含类的高级技术、类的继承、编译链接和命名空间等。 提升篇: 本篇可以帮助学员更加高效的进行c++开发,其中包含类型转换、文件操作、异常处理、代码重用等内容。
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页