南阳ACM8-一种排序
/*
一种排序
时间限制: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
*/
//基本思路是每输入一个长方形的数据就将它与前面的长方形进行比较,如果是相同则将此数据忽略
//否则查询该长方形应插入到排好序的序列中的位置,最后移位进行插入
//最近常到南阳理工的ACM网站去A题了,虽然题大多都不太难,但每当做完一道题,心里都有一种说不出的愉悦。
//程序本身应该也不难,应该是自己的方法选得不对才导致程序写得这么难看,改了大半天,好在最后还是AC了,还是挺开心的
//程序中还多处用到了goto,,没办法呀,想从多重嵌套的for循环中一下子跳出来,还是用goto最省事了。
//网上应该有很多写得更好的代码,我等下也去看看别人写的。
#include <iostream>
using namespace std;
const int M = 1000;
int main()
{
//
freopen("1.txt", "r", stdin);
int n, m, i, j;
int flags;//用来标记应插入的位置
int a[M][3]; //用来存放排好序的长方形数据
int number, length, width;//暂存长方形数据
cin>>n;
while(n--)
{
int temp, mask;
mask = 1; //用来记录存放的长方形个数
cin>>m;
flags = 0;
cin>>a[0][0]>>a[0][1]>>a[0][2];
if (a[0][1] < a[0][2])
{
temp = a[0][1];
a[0][1] = a[0][2];
a[0][2] = temp;
}
for (i = 1; i < m; i++)
{
cin>>number>>length>>width;
if (length < width)//将长,宽中的较大的数存放到变量length中,软小的数存放到变量width中
{
temp = length;
length = width;
width = temp;
}
//下面查找新输入的长方形信息应该插入的正确位置
for (j = mask-1; j >= 0; j--)
{
if (number == a[j][0])
{
for (; j >= 0; j--)
{
if (length == a[j][1])
{
for (; j >= 0; j--)
{
if (width == a[j][2])
{
goto lop;
}
else if((width > a[j][2] && length == a[j][1] && number == a[j][0])
|| (length != a[j][1]) || (number != a[j][0]))
{
flags = j;
goto loop;
}
}
if (j == -1)
goto loop;
}
else if((length > a[j][1] && number == a[j][0]) || (number != a[j][0]))
{
flags = j;
goto loop;
}
}
if (j == -1)
goto loop;
}
else if (number > a[j][0])
{
flags = j;
goto loop;
}
}
loop:
if (j == -1) //如果插入的位置为最前
{
for (j = mask-1; j >= 0; j--)
{
a[j+1][0] = a[j][0];
a[j+1][1] = a[j][1];
a[j+1][2] = a[j][2];
}
a[0][0] = number;
a[0][1] = length;
a[0][2] = width;
mask++;
}
else
{
for (j = mask-1; j > flags; j--)
{
a[j+1][0] = a[j][0];
a[j+1][1] = a[j][1];
a[j+1][2] = a[j][2];
}
a[j+1][0] = number;
a[j+1][1] = length;
a[j+1][2] = width;
mask++;
}
lop:
;
}
for (i = 0; i < mask; i++)
{
cout<<a[i][0]<<" "<<a[i][1]<<" "<<a[i][2]<<endl;
}
}
return 0;
}
南阳ACM8-一种排序的更多相关文章
- 南阳ACM 题目8:一种排序 Java版
一种排序 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 现在有很多长方形,每一个长方形都有一个编号,这个编号可以重复:还知道这个长方形的宽和长,编号.长.宽都是整数:现 ...
- iOS可视化动态绘制八种排序过程
前面几篇博客都是关于排序的,在之前陆陆续续发布的博客中,我们先后介绍了冒泡排序.选择排序.插入排序.希尔排序.堆排序.归并排序以及快速排序.俗话说的好,做事儿要善始善终,本篇博客就算是对之前那几篇博客 ...
- 模板化的七种排序算法,适用于T* vector<T>以及list<T>
最近在写一些数据结构以及算法相关的代码,比如常用排序算法以及具有启发能力的智能算法.为了能够让写下的代码下次还能够被复用,直接将代码编写成类模板成员函数的方式,之所以没有将这种方式改成更方便的函数模板 ...
- 几种排序算法的学习,利用Python和C实现
之前学过的都忘了,也没好好做过总结,现在总结一下. 时间复杂度和空间复杂度的概念: 1.空间复杂度:是程序运行所以需要的额外消耗存储空间,一般的递归算法就要有o(n)的空间复杂度了,简单说就是递归集算 ...
- ACM 一种排序
一种排序 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 现在有很多长方形,每一个长方形都有一个编号,这个编号可以重复:还知道这个长方形的宽和长,编号.长.宽都是整数 ...
- 秒杀9种排序算法(JavaScript版)
一:你必须知道的 1> JS原型 2> 排序中的有序区和无序区 3> 二叉树的基本知识 如果你不知道上面三个东西,还是去复习一下吧,否则,看下面的东西有点吃力. 二:封装丑陋的原型方 ...
- nyoj 8 一种排序
一种排序 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 现在有很多长方形,每一个长方形都有一个编号,这个编号可以重复:还知道这个长方形的宽和长,编号.长.宽都是整数 ...
- JavaScript新手学习笔记3——三种排序方式(冒泡排序、插入排序、快速排序)
每种编程语言学到数组的时候,都会讲到排序算法,当时学C语言的时候,卡在排序算法.今天来总结一下javascript中如何实现三种排序算法. 1.冒泡排序(默认升序排列哦) 原理: 冒泡排序的原理,顾名 ...
- java数组中的三种排序方法中的冒泡排序方法
我记得我大学学java的时候,怎么就是搞不明白这三种排序方法,也一直不会,现在我有发过来学习下这三种方法并记录下来. 首先说说冒泡排序方法:冒泡排序方法就是把数组中的每一个元素进行比较,如果第i个元素 ...
随机推荐
- python-tkinter学习实例
在好友的邀请下,尝试用tkinter做一个卡牌的普通界面显示,正好练习下python的写法. 花了两天学习,写了两天代码,做了个最基本的demo.显示如下: 其中需要引入的第三方库主要有,PIL.P ...
- Go面试题精编100题
Golang精编100题 选择题 1. [初级]下面属于关键字的是()A. funcB. defC. structD. class 参考答案:AC 2. [初级]定义一个包内全局字符串变量,下 ...
- 无法在web服务器上启动调试,iis未列出与打开的URL匹配的网站
错误的原因可能是:在iis的网站上绑定的具体的机器的ip地址. 解决方法:可以在网站上绑定ip地址时选择“全部未分配”项.
- ant design Modal关闭时清除数据的解决方案
背景:modal组件关闭时不清除数据,原来输入的数据还存在 解决方案: 1.modal的api:destroyOnClose 2.手动控制modal的销毁 this.state = { destroy ...
- 给Eclipse安装eUML2插件以及可能出现的依赖错误解决方案(转)
eUML2是一款强大的,基于Eclipse应用程序的UML建模工具.开发者可以在UML开发过程中将模型转化为Java代码:确保软件质量和减少开发时间. 必备条件 Java runtime 1.5 or ...
- 前端构建和模块化工具-coolie
[前言] 假设你之前用过前端模块化工具:seajs.requirejs. 用过前端构建工具grunt.gulp, 而且感到了一些不方便和痛苦,那么你能够试试coolie [coolie] 本文不是一篇 ...
- HAL驱动的串口编程陷阱
http://bbs.elecfans.com/jishu_464356_1_1.html 手上有块NUCLEO STM32L053x板子,用来做串口实验,看了下ST的最新库HAL驱动,于是想用HAL ...
- 荣耀 6 安装 SD 卡,提示:SD卡已安全移除
先前买了个 荣耀6(购买链接),自带存储只有 16G,用来一段时间后,老是提示存储不足.后来发现是 微信 等软件占用了好多存储(缓存),, 好吧,在京东上买了个 64G 扩展卡(购买链接),安装过程如 ...
- 《Go语言实战》摘录:6.1 并发 - 并行 与 并发
6.1 并行 与 并发
- fritshoogland 大神ORACLE :pga-memory-operation latch
https://fritshoogland.wordpress.com/2017/03/01/oracle-12-2-wait-event-pga-memory-operation/#comment- ...