hdu 5062

来源:互联网 发布:gradle mac 安装目录 编辑:程序博客网 时间:2024/05/03 19:22

 

题意:将10^0-10^6之间属于  "Beautiful Palindrome Number" 的数个数打印出来,所谓 "Beautiful Palindrome Number"

是指一中回文串数字,比如123321或者12321,类似于这种的数........

 

分析:代码我是直接打表出来的,因为T<=7,N<=6,数据不大.....

 

AC代码:

#include <iostream>using namespace std;int main(){    int T,N;    int a[8] = {1,9,18,54,90,174,258};    scanf("%d",&T);    while(T--)    {        scanf("%d",&N);        printf("%d\n",a[N]);    }    return 0;}


 

具体算法这里我贴下另外以为大神写的:

#include <iostream>#include <cstring>#include <cstdio>#include <cmath>using namespace std;const int maxn = 1000000+5;int f[maxn];int huiwen(int n)//写一个回文函数{    char array[10];    sprintf(array,"%d",n);//将整数N按%d的形式读入字符串中    int len = strlen(array);//求出字符串的长度    int flag = 1;//设置一个标志变量    if(len%2 == 0)    {       for(int j = 0; j < len/2; j++)//当长度为偶数时,j<len/2        {            if(array[0] != array[len-1] && j == 0)//因为该回文数的各个位是递增的,所以要判断每一位与前一位的大小关系,当j=0时,要特判            {                 flag = 0; break;             }            if((array[j] != array[len-j-1] || array[j-1] >= array[j]) && j > 0)//当j>0时,要判断每一位与前一位的大小关系和len-j-1位置是否相等            {                  flag = 0; break;            }        }    }    else    {        for(int j = 0; j <= len/2; j++)//当为奇数时,j <= len/2        {            if(array[j] != array[len-j-1] && j == 0)            {                  flag = 0; break;             }            if((array[j] != array[len-j-1] || array[j-1] >= array[j]) && j > 0)            {                 flag = 0; break;            }        }    }    if(flag) return 1;    else return 0;}int main(){    int T,N;    int sum = 0,cas = 0;    for(int i = 1; i < 1000001; i++)    {        sum +=huiwen(i);//sun直接对每个数返回的值进行累加,Beautiful回文越大的,sum自然也越大        if(huiwen(i))printf("%d %d\n",++cas,i);//可以输出每一个Beautiful回文数        f[i] = sum;    }    scanf("%d",&T);    while(T--)    {        scanf("%d",&N);        int temp = pow(10,N);        printf("%d",f[temp]);//直接输出    }    return 0;}


 

 

 

0 0
原创粉丝点击