D--机器人Bill

D--机器人Bill

时间: 1ms        内存:128M

描述:

最近,Dr. Jiang 新设计一个机器人Bill。Bill很聪明,会做许多事情。唯独对质数的理解与人类不一样,它是从右往左读数。比如,它看到113时,会理解成311。让它比较23与19哪一个大,它说19大。原因是它的大脑会以为是32与91在进行比较。再比如,让它比较29与31,它说29大。

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

输入:

第一行:N 表示有多少组测试数据。 (2<=N<=5 )
接下来有 N 行,每一行有两个正整数 A,B 表示待排序元素的区间端点。(1<=A<=B<=200000, B-A<=100)

输出:

对于每一行测试数据,输出一行,为所有排好序的元素,元素之间有一个空格。

示例输入:

2
8 15
18 39

示例输出:

11 13
31 23 37 19 29

提示:

参考答案(内存最优[1096]):

#include <stdio.h>
void paixu(int c[],int n)
{
    int i,j,t;
    for(i=0; i<n-1; i++)
        for(j=0; j<n-i-1; j++)
        {
            if(c[j]>c[j+1])
            {
                t=c[j];
                c[j]=c[j+1];
                c[j+1]=t;
            }
        }
}
int bijiao(int c[],int n)
{
    int i,s=0;
    for(i=0; i<n; i++,s=0)
    {
        while(c[i])
        {
            s*=10;
            s+=c[i]%10;
            c[i]/=10;
        }
        c[i]=s;
    }
    paixu(c,n);
    for(i=0; i<n; i++,s=0)
    {
        while(c[i])
        {
            s*=10;
            s+=c[i]%10;
            c[i]/=10;
        }
        c[i]=s;
    }
    return 0;
}
int panduan(int n)
{
    int i;
    if(n<=1)return 0;
    for(i=2; i*i<=n; i++)
        if(n%i==0)return 0;
    return 1;
}
int  main()
{
    int n,a,b,i,c[99],j=0;
    scanf("%d",&n);
    while(n--)
    {
        scanf("%d%d",&a,&b);
        for(i=a,j=0; i<=b; i++)if(panduan(i))c[j]=i,j++;
        bijiao(c,j);
        for(i=0; i<j; i++)printf(i!=j-1?"%d ":"%d\n",c[i]);
    }
    return 0;
}

参考答案(时间最优[0]):

#include<iostream>
#include<algorithm>
using namespace std;

int prime(int k)
{
	int i;
	if(k==1)
        return 0;
	for(i=2;i*i<=k;i++)
	{
		if(k%i==0)
			return 0;
	}
	return 1;
}

int revs(int n)
{
    int converse=0,i,m;
    i=n;
    while(i>0)
    {
        m=i%10;
        i/=10;
        converse=m+converse*10;
    }
    return converse;
}

int main()
{
    int n,a,b,i,j,p[100];
    cin>>n;
    while(n--)
    {
        cin>>a>>b;
        for(i=a,j=0;i<=b;i++)
            if(prime(i))
                p[j++]=revs(i);
        sort(p,p+j);
        for(i=0;i<=j-2;i++)
            cout<<revs(p[i])<<' ';
        cout<<revs(p[j-1])<<endl;
    }
    return 0;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞