Description
最近,Dr. Jiang 新设计一个机器人Bill。Bill很聪明,会做许多事情。唯独对质数的理解与人类不一样,它是从右往左读数。比如,它看到113时,会理解成311。让它比较23与19哪一个大,它说19大。原因是它的大脑会以为是32与91在进行比较。再比如,让它比较29与31,它说29大。
给Bill 两个自然数A和B,让它将 [A,B] 区间中的所有质数按从小到大排序出来。你会认为它如何排序?
Input
第一行:N 表示有多少组测试数据。 (2<=N<=5 )
接下来有 N 行,每一行有两个正整数 A,B 表示待排序元素的区间端点。(1<=A<=B<=200000, B-A<=100)
Output
对于每一行测试数据,输出一行,为所有排好序的元素,元素之间有一个空格。
Sample Input
2 8 15 18 39
Sample Output
11 13 31 23 37 19 29
HINT
Source
ac代码:
#include <iostream>
#include <cstring>
using namespace std;
int fun1(int a,int b){
int i=0,j=0,a1,b2;
a1=a;b2=b;
if(a==b)return 1;
while(a1){
a1/=10;
i++;
}
while(b2){
b2/=10;
j++;
}
if(i>j) return 1;
if(i<j) return 0;
while(a){
if(a%10==b%10){
a/=10;
b/=10;
} else if(a%10>b%10){return 1;}
else return 0;
}
return 0;
}
int p(int a){
if(a<=1&&a>0)return 0;
int i=2;
while(i<a){
if(a%i++==0)
return 0;
}
return 1;
}
int fun(int a,int b){
int i=a,count=0,t,j,k;
int my[100];
for(i=a;i<=b;i++){
if(p(i)==1)
my[count++]=i;
}
t=count;
for(i=0;i<t;i++){
for(j=0;j<t-1-i;j++){
if(fun1(my[j],my[j+1])){
k=my[j];
my[j]=my[j+1];
my[j+1]=k;
}
}
}
i=0;
while(i<count-1)cout<<my[i++]<<' ';
cout<<my[i]<<'\12';
}
int main(){
int n;
cin>>n;
int a,b;
while(n){
cin>>a>>b;
fun(a,b);
n--;
}
return 0;
}
运行结果:
时间: 2024-11-10 01:14:17