HDU 5062 Beautiful Palindrome Number(数学)
主题链接:http://acm.hdu.edu.cn/showproblem.php?
Problem Description
A positive integer x can represent as (a1a2…akak…a2a1)10  or (a1a2…ak−1akak−1…a2a1)10  of
 a 10-based notational system, we always call x is a Palindrome Number. If it satisfies 0<a1<a2<…<ak≤9 ,
 we call x is a Beautiful Palindrome Number.
Now, we want to know how many Beautiful Palindrome Numbers are between 1 and10N .
Now, we want to know how many Beautiful Palindrome Numbers are between 1 and
Input
The first line in the input file is an integer T(1≤T≤7) ,
 indicating the number of test cases.
Then T lines follow, each line represent an integerN(0≤N≤6) .
Then T lines follow, each line represent an integer
Output
For each test case, output the number of Beautiful Palindrome Number.
Sample Input
2 1 6
Sample Output
9 258
Source
题意:
求1到10的n次方的范围内,满足:
1、是回文数;
2、回文的前半部分满足升序。
打表代码:
#include <cstdio>
#include <cstring>
int find_num(int num)
{
    int a[17];
    memset(a,0,sizeof(a));
    int L = 0;
    while(num)
    {
        a[++L] = num%10;
        num/=10;
    }
    for(int i = 1; i <= L/2; i++)//回文
    {
        if(a[i] != a[L-i+1])
            return 0;
    }
    for(int i = 1; i < L/2+L%2; i++)//升序
    {
        if(a[i+1] <= a[i])
            return 0;
    }
    return 1;
}
int main()
{
    int sum[17];
    memset(sum,0,sizeof(sum));
    sum[0] = 1;
    for(int i = 1; i <= 1000000; i++)
    {
        int flag = find_num(i);
        if(flag)
        {
            //printf("num::%d\n",i);
            if(i <= 10)
                sum[1]++;
            if(i <= 100)
                sum[2]++;
            if(i <= 1000)
                sum[3]++;
            if(i <= 10000)
                sum[4]++;
            if(i <= 100000)
                sum[5]++;
            if(i <= 1000000)
                sum[6]++;
        }
    }
    int t;
    for(int i = 0; i <= 6; i++)
    {
        printf("%d::%d\n",i,sum[i]);
    }
    return 0;
}
代码例如以下:
#include <cstdio>
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int n;
        scanf("%d",&n);
        if(n == 0)
            printf("1\n");
        else if(n == 1)
            printf("9\n");
        else if(n == 2)
            printf("18\n");
        else if(n == 3)
            printf("54\n");
        else if(n == 4)
            printf("90\n");
        else if(n == 5)
            printf("174\n");
        else if(n == 6)
            printf("258\n");
    }
    return 0;
}
版权声明:本文博主原创文章。博客,未经同意不得转载。
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号