False Ordering

We define b is a Divisor of a number a if a is divisible by b. So, the divisors of 12 are 1, 2, 3, 4, 6, 12. So, 12 has 6 divisors.

Now you have to order all the integers from 1 to 1000. x will come before y if

1)                  number of divisors of x is less than number of divisors of y

2)                  number of divisors of x is equal to number of divisors of y and x > y.

Input

Input starts with an integer T (≤ 1005), denoting the number of test cases.

Each case contains an integer n (1 ≤ n ≤ 1000).

Output

For each case, print the case number and the nth number after ordering.

Sample Input

5

1

2

3

4

1000

Sample Output

Case 1: 1

Case 2: 997

Case 3: 991

Case 4: 983

Case 5: 840

分析:题目大意是让你对1到1000的数按照题目给出的规则进行排序,根据每个数因子数多少,少的在前面,如果相等,大的在前面,因此自然想到使用comparator自定义比较器,简单易懂,上代码:

import java.util.*;
 public class Main{
    static Scanner in=new Scanner(System.in);
    static List<num> a = new ArrayList<num>();
    static Comparator<num> com = new Comparator<num>() {
		
		@Override
		public int compare(num o1, num o2) {
			if(o1.div==o2.div)
			 return o2.i-o1.i;
			else
			 return o1.div-o2.div;
		}
	};
    static int fun(int num){
    	int sum = 0;
    	int n = 1;
    	while(n!=num){
    		if(num%n==0)
    			sum++;
    		n++;
    	}
    	return sum+1;
    }
    static void solve(){
    	for (int i = 1; i <= 1000; i++) {
			 num n = new num();
			 n.i = i;
			 n.div = fun(i);
			 a.add(n);
		}
    	Collections.sort(a, com);
    }
    public static void main(String args[]){ 
    	solve();
        int k=in.nextInt();
        int ca = 0;
        while(k-->0){
        	ca++;
           int n = in.nextInt(); 
           System.out.println("Case "+ca+": "+  a.get(n-1).i );               
        }
    }
}
 class num{
	 int i;
	 int div;
 }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值