一种排序
时间限制:3000 ms | 内存限制:65535 KB
难度:3
描述
现在有很多长方形,每一个长方形都有一个编号,这个编号可以重复;还知道这个长方形的宽和长,编号、长、宽都是整数;现在要求按照一下方式排序(默认排序规则都是从小到大);
1.按照编号从小到大排序
2.对于编号相等的长方形,按照长方形的长排序;
3.如果编号和长都相同,按照长方形的宽排序;
4.如果编号、长、宽都相同,就只保留一个长方形用于排序,删除多余的长方形;最后排好序按照指定格式显示所有的长方形;
输入
第一行有一个整数 0<n<10000,表示接下来有n组测试数据;
每一组第一行有一个整数 0<m<1000,表示有m个长方形;
接下来的m行,每一行有三个数 ,第一个数表示长方形的编号,
第二个和第三个数值大的表示长,数值小的表示宽,相等
说明这是一个正方形(数据约定长宽与编号都小于10000);
输出
顺序输出每组数据的所有符合条件的长方形的 编号 长 宽
样例输入
1
8
1 1 1
1 1 1
1 1 2
1 2 1
1 2 2
2 1 1
2 1 2
2 2 1
样例输出
1 1 1
1 2 1
1 2 2
2 1 1
2 2 1
其实这样的题技巧性不强,只要认真分析题意,按照题目条件一步一步实现都能做出来,无非是多花一些时间罢了。
最近有一些感触。做题一定要先有思路,知道自己要干什么。做题之前要知道题目的一种解法,无论结果怎样,先给出一个基本解法,然后再进一步优化算法。好的算法不是一蹴而就的,需要注意许多细节
#include <stdio.h>
typedef struct node
{
int nember;
int length;
int wide;
}node;
void swap(node& a,node& b)
{
node temp;
temp = a;
a = b;
b = temp;
}
int main()
{
int i,j,N,n,b,c,t;
node a[10001];
scanf("%d",&N);
while(N--)
{
scanf("%d",&n);
for (i = 0; i < n; i++) //将数据存入结构体数组中
{
scanf("%d%d%d",&t,&b,&c);
a[i].nember = t;
if(b > c) //大的是长,小的是宽
{
a[i].length = b;
a[i].wide = c;
}
else
{
a[i].length = c;
a[i].wide = b;
}
}
for (j = 1; j < n; j++) //用冒泡排序的方法排序,内部做条件限制
for (i = 0; i < n-j; i++)
{
if(a[i].nember > a[i+1].nember) //1.按照编号从小到大排序
{
swap(a[i],a[i+1]);
}
else if(a[i].nember == a[i+1].nember)
{
if(a[i].length > a[i+1].length) //2.对于编号相等的长方形,按照长方形的长排序
{
swap(a[i],a[i+1]);
}
else if(a[i].length == a[i+1].length)
{
if(a[i].wide > a[i+1].wide) //3.如果编号和长都相同,按照长方形的宽排序
{
swap(a[i],a[i+1]);
}
else if(a[i].wide == a[i+1].wide) //4.如果编号、长、宽都相同,就只保留一个长方形用于排序,删除多余的长方形(此处是将重复的长方形数据置零“隐藏”了,作为输出的时候不需输出的标记)
{
a[i].nember = a[i].length = a[i].wide = 0;
}
}
}
}
for(i = 0; i < n; i++) //输出非零数据
{
if(a[i].nember != 0 && a[i].length != 0 && a[i].wide != 0)
{
printf("%d %d %d\n",a[i].nember,a[i].length,a[i].wide);
}
}
}
return 0;
}
分享到:
相关推荐
论文研究-不确定性多属性决策中区间数的一种排序方法.pdf, 为了解决具有不确定性区间数的多属性决策问题,本文给出了一种分析方法.首先是基于文献[5],介绍了一个...
一种排序思想,抛开内存问题,认为,如果不考虑计算机运算开支,仅从逻辑便利性而言,可以一试
快速排序也叫快排,以动画展示快排的全过程(最快的一种排序),以动画的形式展现排序的逻辑,顺序,效率,一目了然,适合新手理解
编制一维数组排序程序。数组大小n用全局变量定义,数组数据从文本文件中读入或随机生成。包含冒泡排序、选择排序、插入排序三种排序方法。程序能够选择使用任何一种方法排序。
利用随机函数产生30000个随机整数,利用插入排序、起泡排序、选择排序、快速排序、堆排序、归并排序等排序方法进行排序,并统计每一种排序上机所花费的时间.zip
练习场 - ACM在线评测系统的第八题,用c++写的
三种冒泡排序算法的例子,比较区别与联系!
(1) 统计每一种排序上机所花费的时间。 (2) 统计在完全正序,完全逆序情况下记录的比较次数和移动次数。 (3) 比较的指标为关键字的比较次数和记录的移动次数(一次记录交换计为3次移动)。 (4) 对结果作简单分析,包括...
针对角对称矩阵的特征值分解问题,提出了一种新的排序Jacobi算法(S-Jacobi).该算法利用Jacobi旋转中的内角和外角实现了特征值的自动排序.仿真结果表明,S-Jacobi的收敛条件在实际中容易满足,而且其收敛速度优于...
1、常见排序算法实现(1-6选择几个算法练习) 1)问题描述:输入一组关键字序列分别实现下列排序。 (1)实现简单选择排序、直接插入...2、在上题的基础上增加功能(程序改名另存):增加变量统计每一种排序的比较次数.
本资源包含《数据结构》考研的九种内部排序算法考点的算法代码及排序过程图示,以表格、图文方式详细讲解每一种排序算法的排序过程。 包含的九种内部排序有:直接插入排序、折半排序、希尔排序、冒泡排序、快速排序...
利用随机函数产生N个随机整数(20000以上),对这些数进行多种方法进行排序。 1) 分别采用的方法有插入排序、...2) 统计每一种排序方法的性能(以上机运行程序所花费的时间为准进行对比),找出其中两种较快的方法。
超级经典的计数排序算法,号称效率达到了O(n) 超级经典的计数排序算法,号称效率达到了O(n) 超级经典的计数排序算法,号称效率达到了O(n) 超级经典的计数排序算法,号称效率达到了O(n) 超级经典的计数排序算法,号称...
2) 统计每一种排序方法的性能(以上机运行程序所花费的时间为准进行对比),找出其中两种较快的方法。 分析: 本系统实现了几种常用的排序方法,包括:插入排序、起泡排序、快速排序(递归、非递归)、堆排序。
冒泡排序,是指计算机的一种排序方法,它的时间复杂度为O(n^2),虽然不及堆排序、快速排序的O(nlogn,底数为2),但是有两个优点:1.“编程复杂度”很低,很容易写出代码;2.具有稳定性,这里的稳定性是指原序列...
2) 统计每一种排序方法的性能(以上机运行程序所花费的时间为准进行对比),找出其中两种较快的方法。 3) 如果采用4种或4种以上的方法者,可适当加分。 PS:采用了直接选择排序算法、冒泡排序、希尔排序、直接插入...
利用随机函数产生N个随机整数(20000以上),对这些数进行多种方法进行排序。要求: 1)至少采用三种方法实现上述问题... 2)统计每一种排序方法的性能(以上机运行程序所花费的时间为准进行对比),找出其中两种较快的方法。
由于需要用到高效的超级列表框排序.就利用汇编版的希尔排序来写了一下超级列表框排序.发现,从取值-排序-显示过程...即可变身另一种排序,可算得上是简单实用通用型模块!!。请先编译后,再测试.@呵呵仙。Tags:快速排序。
(2)统计每一种排序方法的性能(以上机运行程序所花费的时间为准进行对比),找出其中两种较快的方法; (3)统计每种算法所用的比较次数和交换次数,最后列表显示; (4)如果采用4种或4种以上的方法者,可适当...
可包含重复值的列表排序算法 返回值为: 排序后数据的新列表(从小到大/从大到小) 排序后数据在原列表中的索引列表(从小到大/从大到小) 原列表的数据量