NYOJ-8-一种排序(comparator排序)

时间限制: 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
来源
经典题目
上传者
iphxer


 

 

mport java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;//一种排序	Accepted	 112	 2711	java	08-07 16:57:50
public class  NYOJ_3_一种排序{
	public static  void main(String[] args) {
		
		Scanner scan=new Scanner (System.in); 
		 
		int N=scan.nextInt();
		 
		  int a,b,c;
		  
		  while(N--!=0){
			 
			  int M=scan.nextInt();
			
			  Rectangular [] arr=new Rectangular[M];//相当于C语言的结构体!
			   
			 for(int i=0;i<M;i++){
			    	
			    	Rectangular rt=new Rectangular();
			    	 
			    	rt.id=scan.nextInt();
			    	
			    	 a=scan.nextInt();
			    	 
			    	  b=scan.nextInt();
			    	 
			    	  rt.length=Math.max(a, b);//直接转换为length>=width!
			    	 
			    	  rt.width=a+b-rt.length;
			    	 arr[i]=rt; //每一个成员,加入到arr[]里
			    }
			    Arrays.sort(arr, new  RectComparator());//对加入的成员的每个的属性也进行排序
			   
			    a=arr[0].id; b=arr[0].length; c=arr[0].width;
			    
			    System.out.println(arr[0].id+" "+arr[0].length+" "+arr[0].width);
			   
			    for(int i=1; i< arr.length; i++){
			    	
			    	if(a==arr[i].id&&b==arr[i].length&&c==arr[i].width){
			    		continue;
			    		
			    	}else{
			    		System.out.println(arr[i].id+" "+arr[i].length+" "+arr[i].width);
			    		 a=arr[i].id; b=arr[i].length; c=arr[i].width;
			    	}
			    	
			    	
			    }
			    
			  
		  }
		
	}
}

 class RectComparator implements Comparator<Rectangular>{

	  public int compare(Rectangular r1, Rectangular r2) {
		 if(r1.id!=r2.id){
			return r1.id > r2.id ? 1 : -1 ;
			
		}else if(r1.id==r2.id&&r1.length!=r2.length){
			return r1.length > r2.length ? 1 : -1;
			
		}else 
			return r1.width > r2.width ? 1 : -1 ;
	}
}
class Rectangular{
	int  id,length,width;
}


 

其他做法(Java):comparator排序

import java.util.Comparator;
import java.util.Iterator;
import java.util.Scanner;
import java.util.TreeSet;

public class  NYOJ_3_一种排序{//张燚	一种排序	Accepted	 151	 2776	java	08-06 21:56:07 nyoj
	@SuppressWarnings("unchecked")
	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		int N=input.nextInt();
		while(N-->0){
			int n=input.nextInt();
			TreeSet ts=new TreeSet(new SORT());
			for(int i=0;i<n;i++){
				int a=input.nextInt();
				int b=input.nextInt();
				int c=input.nextInt();
				if(b<c){
					int d=b;
					b=c;
					c=d;
				}
				F f=new F(a,b,c);
				ts.add(f);
			}
			Iterator it=ts.iterator();
			F f[]=new F[n+1];
			int e=-1;
			while(it.hasNext()){
				F r=(F) it.next();
				if(e==-1){
					f[++e]=r;
				}
				else if(!(r.bianhao==f[e].bianhao&&r.c==f[e].c&&r.k==f[e].k)){
					f[++e]=r;
				}
			}
			for(int i=0;i<=e;i++){
				System.out.println(f[i].bianhao+" "+f[i].c+" "+f[i].k);
			}
		}
	}

	
}
class SORT implements Comparator<F>{

	@Override
	public int compare(F o1, F o2) {
		if(o1.bianhao>o2.bianhao)
			return 1;
		else if(o1.bianhao==o2.bianhao&&o1.c>o2.c)
			return 1;
		else if(o1.bianhao==o2.bianhao&&o1.c==o2.c&&o1.k>o2.k)
			return 1;
		else
			return -1;
	}
	
}
class F{
	int bianhao,c,k;
	F(int bianhao,int c,int k){
		this.bianhao=bianhao;
		this.c=c;
		this.k=k;
	}
	F(){}
}


 

本项目是一个基于SSM(Spring+SpringMVC+MyBatis)后端框架与Vue.js前端框架开发的疫情居家办公系统。该系统旨在为居家办公的员工提供一个高效、便捷的工作环境,同时帮助企业更好地管理远程工作流程。项目包含了完整的数据库设计、前后端代码实现以及详细的文档说明,非常适合计算机相关专业的毕设学生和需要进行项目实战练习的Java学习者。 系统的核心功能包括用户管理、任务分配、进度跟踪、文件共享和在线沟通等。用户管理模块允许管理员创建和管理用户账户,分配不同的权限。任务分配模块使项目经理能够轻松地分配任务给团队成员,并设置截止日期。进度跟踪模块允许员工实时更新他们的工作状态,确保项目按计划进行。文件共享模块提供了一个安全的平台,让团队成员可以共享和协作处理文档。在线沟通模块则支持即时消息和视频会议,以增强团队之间的沟通效率。 技术栈方面,后端采用了Spring框架来管理业务逻辑,SpringMVC用于构建Web应用程序,MyBatis作为ORM框架简化数据库操作。前端则使用Vue.js来实现动态用户界面,搭配Vue Router进行页面导航,以及Vuex进行状态管理。数据库选用MySQL,确保数据的安全性和可靠性。 该项目不仅提供了一个完整的技术实现示例,还为开发者留下了扩展和改进的空间,可以根据实际需求添加新功能或优化现有功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值