大致是一个机器人很聪明,但会把质数反过来看,例如把13看成31,所以排序时19比37大。
现先输入一个数N,代表实验实例的个数
接下来输入a和b,代表[a,b]区间。
下一行输出这个区间内的质数,从小到大排序,注意要按机器人的要求,例如输入19和35,输出31 23 19 29,每个数之间有一个空格。
我给出的这段代码理论上是正确的,但就是错误的。。。。。
#include<iostream> using namespace std; bool gcd(int n) { if(n==1) return false; int i,m=0; for(i=2;i<n;i++) { if(n%i==0) m++; } if(m==0) return true; else return false; } int change(int n) { int i,m,a[20],b,c=0,g; g=n; for(i=0;n!=0;i++) n=n/10; m=i; n=g; for(i=0;i<m;i++) { b=n%10; a[i]=b; n=n/10; } for(i=0;i<m;i++) { c=c+a[i]; if(i==m-1) break; c=c*10; } return c; } int main() { int n,a,b,i,c[100000]={},d,t,m,j; cin>>n; while(n--) { d=0; cin>>a>>b; for(i=a;i<=b;i++) { if(gcd(i)) c[d++]=i; } for(i=0;c[i]!=0;i++); m=i; for(i=0;i<m;i++) for(j=0;j<m-i-1;j++) { if(change(c[j])>change(c[j+1])) { t=c[j]; c[j]=c[j+1]; c[j+1]=t; } } for(i=0;i<m;i++) { if(i<m-1) cout<<c[i]<<" "; else cout<<c[i]<<endl; } } return 0; }
时间: 2024-10-05 15:59:21