NYOJ---540奇怪的排序
生活随笔
收集整理的這篇文章主要介紹了
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行,每一行有兩個正整數A B表示待排序元素的區間范圍. (1<=A<=B<=200000 B-A<=50)
//先求出轉換后的結果,在因排序元素交換時對應調換轉換前的元素即可
//c
#include <stdio.h> #include <string.h> #include <math.h> int reverse(int t) {int sum = 0,i,len;char s[6] = {'\0'};//注意初始化方式 sprintf(s,"%d",t);//整形轉化為字符串,頭文件為stdio.hlen = 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("\n");}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; }?
?轉載于:https://www.cnblogs.com/520xiuge/p/5345769.html
總結
以上是生活随笔為你收集整理的NYOJ---540奇怪的排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深入浅出空间索引:2
- 下一篇: IOS 手机助手及越狱助手推荐