/*
一种排序

时间限制: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-一种排序的更多相关文章

  1. 南阳ACM 题目8:一种排序 Java版

    一种排序 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 现在有很多长方形,每一个长方形都有一个编号,这个编号可以重复:还知道这个长方形的宽和长,编号.长.宽都是整数:现 ...

  2. iOS可视化动态绘制八种排序过程

    前面几篇博客都是关于排序的,在之前陆陆续续发布的博客中,我们先后介绍了冒泡排序.选择排序.插入排序.希尔排序.堆排序.归并排序以及快速排序.俗话说的好,做事儿要善始善终,本篇博客就算是对之前那几篇博客 ...

  3. 模板化的七种排序算法,适用于T* vector<T>以及list<T>

    最近在写一些数据结构以及算法相关的代码,比如常用排序算法以及具有启发能力的智能算法.为了能够让写下的代码下次还能够被复用,直接将代码编写成类模板成员函数的方式,之所以没有将这种方式改成更方便的函数模板 ...

  4. 几种排序算法的学习,利用Python和C实现

    之前学过的都忘了,也没好好做过总结,现在总结一下. 时间复杂度和空间复杂度的概念: 1.空间复杂度:是程序运行所以需要的额外消耗存储空间,一般的递归算法就要有o(n)的空间复杂度了,简单说就是递归集算 ...

  5. ACM 一种排序

    一种排序 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 现在有很多长方形,每一个长方形都有一个编号,这个编号可以重复:还知道这个长方形的宽和长,编号.长.宽都是整数 ...

  6. 秒杀9种排序算法(JavaScript版)

    一:你必须知道的 1> JS原型 2> 排序中的有序区和无序区 3> 二叉树的基本知识 如果你不知道上面三个东西,还是去复习一下吧,否则,看下面的东西有点吃力. 二:封装丑陋的原型方 ...

  7. nyoj 8 一种排序

    一种排序 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 现在有很多长方形,每一个长方形都有一个编号,这个编号可以重复:还知道这个长方形的宽和长,编号.长.宽都是整数 ...

  8. JavaScript新手学习笔记3——三种排序方式(冒泡排序、插入排序、快速排序)

    每种编程语言学到数组的时候,都会讲到排序算法,当时学C语言的时候,卡在排序算法.今天来总结一下javascript中如何实现三种排序算法. 1.冒泡排序(默认升序排列哦) 原理: 冒泡排序的原理,顾名 ...

  9. java数组中的三种排序方法中的冒泡排序方法

    我记得我大学学java的时候,怎么就是搞不明白这三种排序方法,也一直不会,现在我有发过来学习下这三种方法并记录下来. 首先说说冒泡排序方法:冒泡排序方法就是把数组中的每一个元素进行比较,如果第i个元素 ...

随机推荐

  1. JAVA 画图板实现(基本画图功能+界面UI)一、界面实现

    /*文章中用到的代码只是一部分,需要源码的可通过邮箱联系我 1978702969@qq.com*/ 这段时间在学JAVA的swing界面开发,试着做了个画图板.实现了直线.曲线.喷枪.矩形.圆形.文字 ...

  2. 循序渐进学.Net Core Web Api开发系列【10】:使用日志

    系列目录 循序渐进学.Net Core Web Api开发系列目录 本系列涉及到的源码下载地址:https://github.com/seabluescn/Blog_WebApi 一.本篇概述 本篇介 ...

  3. 「WC 2019」数树

    「WC 2019」数树 一道涨姿势的EGF好题,官方题解我并没有完全看懂,尝试用指数型生成函数和组合意义的角度推了一波.考场上只得了 44 分也暴露了我在数数的一些基本套路上的不足,后面的 \(\ex ...

  4. error/exception/runtime exception区别

    (1)java中的异常是什么? 异常指的是程序运行过程中出现的非正常情况或错误,当程序违反了语义规则时,jvm就会将出现的错误表示为一个异常抛出.在java中,一切皆对象,异常也是,它被当作一个对象, ...

  5. Upsync:微博开源基于Nginx容器动态流量管理方案

    Upsync:微博开源基于Nginx容器动态流量管理方案 https://mp.weixin.qq.com/s?__biz=MzAwMDU1MTE1OQ==&mid=404151075& ...

  6. [原创]互联网公司App测试流程

    [原创]互联网公司App测试流程 一款App的发布上线,离不开充分的测试工作,App测试与pc软件测试二者大体流程相同,但也有所区别,其中由于App测试有其固有的特性,所以在测试时流程会有不同,具体我 ...

  7. JAVA泛型中的有界类型(extends super)(转)

    JDK1.5中引入了泛型(Generic)机制.泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛型方法. Ja ...

  8. vbs学习笔记2——创建桌面快捷方式

    脚本 Set WshShell = WScript.CreateObject("WScript.Shell") strDesktop = WshShell.SpecialFolde ...

  9. mexHttpBinding协议 【发布元数据终结点】

    我们需要知道很多东西才能使用微软通信基础架构(WCF)来开发应用程序.尽管这本书已经试着囊括普通开发人员需要了解的WCF所有内容,也还是有一些内容没有讨论到.附录的主要目的是填充这些罅隙. 发布元数据 ...

  10. [Winform]Media Player组件全屏播放的设置

    摘要 在设置程序开始运行时,让视频全屏播放时,直接设置 windowsMediaPlay.fullScreen = true; 会报错,代码如下 windowsMediaPlay.URL = _vid ...