关闭

一种排序

180人阅读 评论(0) 收藏 举报
分类:

一种排序

时间限制: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


<span style="font-family:SimSun;font-size:18px;">#include <stdio.h>
#include <stdlib.h>
struct S
{
    int num;//编号
    int len;//长
    int wid;//宽
};
int cmp(const void *a, const void *b)        
{
    S * c=(S *) a;
    S * d=(S *) b;

    if(c->num!=d->num)//第一层比较
    {
        return c->num-d->num;
    }
    else if(c->len!=d->len)//第二层比较
    {
        return c->len-d->len;
    }
    else if(c->wid!=d->wid)// 第三层比较
    {
        return c->wid-d->wid;
    }
    
}

int main()
{
    int n,i,m,t;
    scanf("%d",&n);
    while(n--)
    {
        S s[1000];
        scanf("%d",&m);
        for(i=0;i<m;i++)
        {
            scanf("%d %d %d",&s[i].num,&s[i].len,&s[i].wid);
            if(s[i].len<s[i].wid)//如果长 小于 宽,长宽 交换位置
            {
                t=s[i].len;
                s[i].len=s[i].wid;
                s[i].wid=t;
            }    
        }
        qsort(s,m,sizeof(S),cmp);

        printf("\n%d %d %d\n",s[0].num,s[0].len,s[0].wid);
        for(i=1;i<m;i++)
        {
            if(!(s[i].num==s[i-1].num && s[i].len==s[i-1].len && s[i].wid==s[i-1].wid))

            //if语句,当不满足其中任一个,都不输出。 

              printf("%d %d %d\n",s[i].num,s[i].len,s[i].wid);
        }
    }
    return 0;
}</span>


















0
0
查看评论

南阳oj第8题一种排序

#include #include #include #include using namespace std; typedef struct{ int a,b,c; }s; bool cmp(s s1,s s2){ if(s1.a if(s1.a==s2.a&...
  • suhu1
  • suhu1
  • 2014-02-24 21:03
  • 420

NYOJ 一种排序问题

一种排序 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 现在有很多长方形,每一个长方形都有一个编号,这个编号可以重复;还知道这个长方形的宽和长,编号、长、宽都是整数;现在要求按照一下方式排序(默认排序规则都是从小到大); 1.按照编号从小到大...
  • huihui1094667985
  • huihui1094667985
  • 2016-07-13 19:45
  • 338

一种排序(nyoj8)(简单排序)

一种排序 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述现在有很多长方形,每一个长方形都有一个编号,这个编号可以重复;还知道这个长方形的宽和长,编号、长、宽都是整数;现在要求按照一下方式排序(默认排序规则...
  • hdd871532887
  • hdd871532887
  • 2014-11-20 00:02
  • 755

NYOJ 8 一种排序【快排】

三级快排,注意题意要求就可以了。   一种排序 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 现在有很多长方形,每一个长方形都有一个编号,这个编号可以重复;还知道这个长方形的宽和长,编号...
  • qq_16767427
  • qq_16767427
  • 2014-12-21 02:41
  • 592

用Java语言实现五种常用排序

// 选择排序 private static void select_sort(int a[]) { int i, j, t, min; for (i = 0; i < a.length - 1; i++) { min = i; for (j = ...
  • wbq620524
  • wbq620524
  • 2016-11-03 22:41
  • 235

NSWOJ ~ 1100 ~ —种排序(结构体排序)

题目网址:NSWOJ-1100一种排序 1100 - 一种排序 时间限制:3秒 内存限制:128兆 题目描述 现在有很多长方形,每一个长方形都有一个编号,这个编号可以重复;还知道这个长方形的宽和长,编号、长、宽都是整数;现在要求按照一下方式排序(默认排序规则都是从小到大); ...
  • ZscDst
  • ZscDst
  • 2017-04-04 21:14
  • 239

一种排序-OJ

一种排序 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述现在有很多长方形,每一个长方形都有一个编号,这个编号可以重复;还知道这个长方形的宽和长,编号、长、宽都是整数;现在要求按照一下方式排序(默认排序规则...
  • wang_fu_grong_16
  • wang_fu_grong_16
  • 2017-08-14 22:20
  • 87

【计蒜客系列】挑战难题27:三值排序

题目来源:计蒜客 排序是一种很频繁的计算任务。一个实际的例子是,当我们给某项竞赛的优胜者按金银铜牌排序的时候。在这个任务中可能的值只有三种1,2和3。我们用交换的方法把他排成升序的。 写一个程序计算出,计算出的一个包括1、2、3三种值的数字序列,排成升序所需的最少交换次数。 输入第1行为类别的数量N...
  • z9550695
  • z9550695
  • 2015-08-06 16:43
  • 687

一种排序 Java实现

一种排序 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 现在有很多长方形,每一个长方形都有一个编号,这个编号可以重复;还知道这个长方形的宽和长,编号、长、宽都是整数;现在要求按照一下方式排序(默认排序规则都是从小到大)...
  • fanyanqin65
  • fanyanqin65
  • 2015-09-30 16:38
  • 382

usaco三值的排序

排序是一种很频繁的计算任务。现在考虑最多只有三值的排序问题。一个实际的例子是,当我们给某项竞赛的优胜者按金银铜牌排序的时候。在这个任务中可能的值只有三种1,2和3。我们用交换的方法把他排成升序的。 写一个程序计算出,给定的一个1,2,3组成的数字序列,排成升序所需的最少交换次数。 [编辑]格式 ...
  • zhhx2001
  • zhhx2001
  • 2016-04-28 22:04
  • 556
    个人资料
    • 访问:56492次
    • 积分:2349
    • 等级:
    • 排名:第18728名
    • 原创:182篇
    • 转载:18篇
    • 译文:0篇
    • 评论:12条