/*
一种排序

时间限制: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. Android对Sqlite数据库的增删改查

    SqLite 数据库 Google 为我们提供了sqlite相关的api SqLiteOpenHelper 这是一个抽象的类 如果想要使用的话,需要其他的类去继承他 SqLiteDatabase 类 ...

  2. 如何对vue项目进行优化,加快首页加载速度

    上个月上线了一个vue小项目,刚做完项目,打包上线之后,传到服务器上发现首页加载巨慢. 由于开发时间比较紧,我想着怎么快怎么来,因而在开发过程中没考虑过优化性能问题,酿成最后在带宽5M的情况下页面加载 ...

  3. FireDAC 下的 Sqlite [2] - 第一个例子

    为了方便测试, 我把官方提供的 C:\Users\Public\Documents\Embarcadero\Studio\14.0\Samples\data\FDDemo.sdb 复制了一份到 C:\ ...

  4. 20款最好的免费 Bootstrap 后台管理和前端模板

    Admin Bootstrap Templates Free Download 1. SB Admin 2 Preview | Details & Download 2. Admin Lite ...

  5. Fiddler 实现手机的抓包

    Fiddler是我最喜爱的工具,几乎每天都用, 我已经用了8年了. 至今我也只学会其中大概50%的功能. Fiddler绝对称得上是"神器", 任何一个搞IT的人都得着的. 小弟我 ...

  6. WCID Devices -- Windows Compatible ID Devices

    WCID Devices What is WCID? A WCID device, where WCID stands for "Windows Compatible ID", i ...

  7. 在windows server 2008 R2 64bit上面配置PI OPC Server的DCOM

    今天想配置PI OPC SERVER的DCOM设置,但是发现在“运行dcomcnfg->组件服务-计算机-我的电脑-DCOM设置”中找不到PI OSI DA Server.如下图所示 这是以前从 ...

  8. SourceTree 的初次使用的两个小问题

    菜鸟才开始使用SourceTree,出现了两个小问题,特此整理一下,希望对各位新手有帮助.刚开始以为装了SourceTree就不用装git了,其实不然,不装git就会出现下面第一个问题: 1.新手使用 ...

  9. Unity3d学习笔记记录

    1.发布到 ipad字体显示不出来,改变Position位置的Z轴为-1 2.发布打包有问题,记得用户权限有没有设置 3.ipad4分辨率:2048*1536 4.调整界面大小,尽量调整底下子对象位置 ...

  10. 我来科普一下为毛很多人升级了20M的电信光纤宽带反而感觉速度更卡了

    下载(在线看视频,看网页,下载游戏这类都是属于下载类应用) 为毛很多人升级20M光纤更慢了呢? 因为电信对你的上传速度做了手脚, 8M以及以上家用光纤宽带全部上传限速到100KB/s  也就是1M带宽 ...