# Lightoj1109——False Ordering（数学+结构体）

38人阅读 评论(0)

1109 - False Ordering

 Time Limit: 1 second(s) Memory Limit: 32 MB

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.

# Output for Sample Input

5

1

2

3

4

1000

Case 1: 1

Case 2: 997

Case 3: 991

Case 4: 983

Case 5: 840

#include<cstdio>
#include<algorithm>
using namespace std;
struct st
{
int num,div;
}a[1010];
bool cmp(st a,st b)
{
if(a.div==b.div)
return a.num>b.num;
return a.div<b.div;
}
int main()
{
int t,flag=1;
scanf("%d",&t);
a[1].num=1;
a[1].div=1;
for(int i=2;i<=1000;i++)
{
a[i].num=i;
for(int j=1;j<=i;j++)
{
if(i%j==0)
a[i].div++;
}
}
sort(a+1,a+1001,cmp);
while(t--)
{
int n;
scanf("%d",&n);
printf("Case %d: %d\n",flag++,a[n].num);
}
return 0;
}

0
0

* 以上用户言论只代表其个人观点，不代表CSDN网站的观点或立场
个人资料
• 访问：12744次
• 积分：1510
• 等级：
• 排名：千里之外
• 原创：158篇
• 转载：11篇
• 译文：0篇
• 评论：0条