• LightOJ 1109


    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.

    Sample Input

    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

    题目大意:

      题目说的是,给你[1,1000]里面的数字,让你按照如下的两条规则来排序,

      1.如果x的因子的个数大于y的因子的个数,那么y排在x的前面。

      2.如果x的因子的个数等于y的因子的个数,且x>y,那么x排在y的前面。

    解题思路:

      直接打表,然后按照以上两条规则来sort就可以了。

    代码:

     1 # include<cstdio>
     2 # include<iostream>
     3 # include<algorithm>
     4 
     5 using namespace std;
     6 
     7 # define MAX 1234
     8 
     9 int a[MAX];
    10 
    11 struct node
    12 {
    13     int val;
    14     int id;
    15 }num[MAX];
    16 
    17 
    18 int cmp ( const struct node & x,const struct node & y )
    19 {
    20     if ( x.val==y.val )
    21     {
    22         return x.id > y.id;
    23     }
    24     return x.val < y.val;
    25 }
    26 
    27 
    28 void init()
    29 {
    30     for ( int i = 1;i <= 1000;i++ )
    31     {
    32         num[i].id = i;
    33         for ( int j = 1;j <= i;j++ )
    34         {
    35             if ( i%j == 0 )
    36             {
    37                 num[i].val++;
    38             }
    39         }
    40     }
    41 }
    42 
    43 
    44 
    45 int main(void)
    46 {
    47     init();
    48     sort(num+1,num+1001,cmp);
    49     int icase = 1;
    50     int t;scanf("%d",&t);
    51     while ( t-- )
    52     {
    53         int n;scanf("%d",&n);
    54         printf("Case %d: ",icase++);
    55         printf("%d
    ",num[n].id);
    56 
    57     }
    58 
    59 
    60     return 0;
    61 }

    代码:

  • 相关阅读:
    VB获取对象成员
    VB一键扫雷
    VBS代码
    C# LINQ GroupBy
    C# 元组和值元组
    数据结构笔记
    DoTween使用
    Unity中常用的数据结构总结
    Unity 坐标系转换
    .Net中C# Dictionary 用法
  • 原文地址:https://www.cnblogs.com/wikioibai/p/4459961.html
Copyright © 2020-2023  润新知