幸运数

作者在 2011-11-08 22:47:14 发布以下内容

题目描述:

已知妹子的幸运数字是个位数。据说任意[a,b](闭区间)之间幸运数字出现的次数,鹏鹏都知道。这是真的吗?写个程序算一下吧,看看是不是跟鹏鹏说的一样。

数据范围:

t <= 100 <= s <= 90 <= a <= b <= 10 ^ 8

输入格式:

第一行有一个数字T,表示有T组测试数据。

之后对于每组测试数据:

第一行一个数,即幸运数字s(0<=s<=9)

第二行两个数,代表题中的ab

输出格式:

一个数,即幸运数字出现的次数。

样例输入:

1

6

0 100

样例输出:

20

#include <stdlib.h>
#include <math.h>
#include <stdio.h>

#define GOLEFT 0
#define GORIGHT 1

int  is_prime(int x)
{
    int i;
    if(x<4)
    {
        if(x==0||x==1) return 0;
    }
    for (i=2; i<=(int)sqrt(x); i++)
    {
        if(x%i==0) return 0;
    }
    return 1;
}
void change_p(int  *p,int Long)
{
    int temp,i,up;
    up=Long;
    for(i=0;i<Long/2;i++)
    {
        temp=p[i];
        p[i]=p[up];
        p[up]=temp;
        up--;
    }
    //return p;

}
int maxture_aNum(int *p,int flag,int command,int Long)
{
    int Num=0;
    int i;
    if(command==0)
    {
        for(i=0;i<=flag;i++)
        {
            Num=Num*10+p[i];
        }
    }
    else if(command==1)
    {
        if(flag+1==Long-1) return p[flag+1];
        else
        {
            for(i=flag+1;i<Long;i++)
            {
                Num=Num*10+p[i];
            }

        }
    }
    return Num;
}
int  is_special(int x)
{
    int y=x;
    int num;
    int p[10]={0};
    int j, i=0;
    //int test;
    do
    {
        num=y%10;
        if(!is_prime(num)) return 0;
        p[i]=num;
        i++;
        y=y/10;
    } while (y>0);
    change_p(p,i-1);
    if(i>2)
    {
        for (j=0; j<i-1; j++)
        {
            /*
             *test=maxture_aNum(p,j,GOLEFT,i);
             *if(!is_prime(test)) return 0;
             *test=maxture_aNum(p,j,GORIGHT,i);
             *if(!is_prime(test)) return 0;
            
*/
            if(!(is_prime(maxture_aNum(p,j,GOLEFT,i)))) return 0;
            if(!(is_prime(maxture_aNum(p,j,GORIGHT,i)))) return 0;
        }

    }
    return 1;

}
void find_special(int up)
{
    int sum=0;
    int i;
    for(i=1;i<=up;i++)
    {
        sum+=is_special(i);
    }
    printf("%d\n",sum);
}
int  main()
{
    int num,N[10];
    int i;
    scanf("%d",&num);
    if(num>10) exit(-1);
    for (i=0;i<num;i++ )
    {
        scanf("%d",&N[i]);
        if (N[i]>(int)pow(10,9))exit(-1);
        find_special(N[i]);
    }
    /*
     *int i;
     *for(i=1;i<1000;i++)
     *{
     *    printf("%d\t%d\n",i,is_special(i));
     *}
    
*/
    return 0;
}
 
c语言小程序 | 阅读 1035 次
文章评论,共0条
游客请输入验证码
浏览70045次