zoukankan      html  css  js  c++  java
  • NYOJ---540奇怪的排序

    奇怪的排序

    时间限制:1000 ms  |  内存限制:65535 KB
    难度:1
    描述

    最近,Dr. Kong 新设计一个机器人Bill.这台机器人很聪明,会做许多事情。惟独对自然数的理解与人类不一样,它是从右往左读数.比如,它看到123时,会理解成321.让它比较23与15哪一个大,它说15大。原因是它的大脑会以为是32与51在进行比较.再比如让它比较29与30,它说29大.

    给定Bill两个自然数A和B,让它将 [A,B] 区间中的所有数按从小到大排序出来。你会认为它如何排序?

    输入
    第一行: N表示有多少组测试数据. (2<=N<=5 )
    接下来有N行,每一行有两个正整数A B表示待排序元素的区间范围. (1<=A<=B<=200000 B-A<=50)
    输出
    对于每一行测试数据,输出一行,为所有排好序的元素,元素之间有一个空格.
    样例输入
    2
    8 15
    22 39
    样例输出
    10 8 9 11 12 13 14 15
    30 31 22 32 23 33 24 34 25 35 26 36 27 37 28 38 29 39
    //先求出转换后的结果,在因排序元素交换时对应调换转换前的元素即可
    //c
    #include <stdio.h> #include <string.h> #include <math.h> int reverse(int t) { int sum = 0,i,len; char s[6] = {''};//注意初始化方式 sprintf(s,"%d",t);//整形转化为字符串,头文件为stdio.h len = strlen(s); for(i=len-1;i>=0;i--) { sum += (s[i] - '0')*(int)pow(10,i); } return sum; } void swap(int *c,int *d,int i,int j) { d[j] = d[i] - d[j] + (d[i] = d[j]); c[j] = c[i] - c[j] + (c[i] = c[j]); } int partition(int *c,int *d,int p,int r) { int i = p,j = r+1; int x = d[p]; while(1) { while(d[++i] < x && i < r); while(d[--j] > x); if(i >= j)//结束标志 break; swap(c,d,i,j); } swap(c,d,p,j); return j; } void QuickSort(int *c,int *d,int p,int r) { int q; if(p<r) { q = partition(c,d,p,r); QuickSort(c,d,p,q-1); QuickSort(c,d,q+1,r); } } int main() { int N,i,j,a,b; int c[50],d[50]; scanf("%d",&N); for(i=0;i<N;i++) { scanf("%d%d",&a,&b); for(j=0;j <= b-a;j++) { c[j] = j + a; d[j] = reverse(c[j]); } QuickSort(c,d,0,b-a);//d排序的同时,c对应排序 for(j=0;j<=b-a;j++) printf("%d ",c[j]); printf(" "); } return 0; }
    //c++ ----leida
    #include <iostream>
    #include <algorithm>
    using namespace std;
    bool cmp(int a,int b)
    {
        int c,d;
        c = d = 0;
        while(a)//反转后的数
        {
            c = 10*c + a%10;
            a /= 10;
        } 
        while(b)//反转后的数
        {
            d = 10*d + b%10;
            b /= 10;
        } 
        return c < d;//升序排序 
    }
    int main()
    {
        int i,a,b,N;
        int c[51];
        cin >> N;
        while(N--)
        {
            cin >> a >> b;
            for(i=0;i<=b-a;i++)
            {
                c[i] = i + a;
            }
            sort(c,c+b-a+1,cmp);
            for(i=0;i<=b-a;i++)
                cout << c[i]  << " ";
            cout << endl;
        }
        return 0;
    }
     
  • 相关阅读:
    PAT (Advanced Level) Practice 1071 Speech Patterns (25分)
    PAT (Advanced Level) Practice 1070 Mooncake (25分)
    PAT (Advanced Level) Practice 1069 The Black Hole of Numbers (20分)
    PAT (Advanced Level) Practice 1074 Reversing Linked List (25分)
    PAT (Advanced Level) Practice 1073 Scientific Notation (20分)
    第一次冲刺个人总结01
    构建之法阅读笔记01
    人月神话阅读笔记01
    四则运算2
    学习进度条(软件工程概论1-8周)
  • 原文地址:https://www.cnblogs.com/emptyCoder/p/5345769.html
Copyright © 2011-2022 走看看