码迷,mamicode.com
首页 > 编程语言 > 详细

NYOJ 8 一种排序

时间:2015-05-31 18:29:24      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:acm

  • 描述

  • 现在有很多长方形,每一个长方形都有一个编号,这个编号可以重复;还知道这个长方形的宽和长,编号、长、宽都是整数;现在要求按照一下方式排序(默认排序规则都是从小到大);

    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>
#include <malloc.h>
typedef struct
{
	int a,b,c,flag;
} List,*Link;
//交换
void Swap(List* m,List* n)
{
	List *k;
	k=(Link)malloc(sizeof(List));
	*k=*m;
	*m=*n;
	*n=*k;
	free(k);
}
int main()
{
	int n,a,i,j,temp;
	Link h[1000];
	scanf("%d",&n);
	getchar();
	while(n--)
		{
			scanf("%d",&a);
			getchar();
			for(i=0; i<a; i++)
				{
					h[i]=(Link)malloc(sizeof(List));
					scanf("%d%d%d",&h[i]->a,&h[i]->b,&h[i]->c);
					if(h[i]->b<h[i]->c)
						{
							temp=h[i]->b;
							h[i]->b=h[i]->c;
							h[i]->c=temp;
						}
				}
			for(i=0; i<a; i++)
				h[i]->flag=1;
			for(i=0; i<a-1; i++)
				{
					for(j=i+1; j<a; j++)
						{
							if(h[i]->a>h[j]->a&&h[i]->flag&&h[j]->flag)
								{
									Swap(h[i],h[j]);
									continue;
								}
							else if(!(h[i]->flag))
								break;
							else if(!(h[j]->flag))
								continue;
							else if(h[i]->a==h[j]->a)
								{
									if(h[i]->b>h[j]->b)
										{
											Swap(h[i],h[j]);
											continue;
										}
									else if(h[i]->b==h[j]->b)
										{
											if(h[i]->c>h[j]->c)
												{
													Swap(h[i],h[j]);
													continue;
												}
											else if(h[i]->c==h[j]->c)
												{
													h[i]->flag=0;
												}
										}
								}
						}
				}
			printf("\n");
			for(i=0; i<a; i++)
				{
					if (h[i]->flag)
						printf("%d %d %d\n",h[i]->a,h[i]->b,h[i]->c);
				}
		}
	return 0;
}


有点麻烦,不过能AC

运行结果:



技术分享


NYOJ 8 一种排序

标签:acm

原文地址:http://blog.csdn.net/u011694809/article/details/46122715

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!