Problem J: 回文数

Problem J: 回文数

Time Limit: 3 Sec  Memory Limit: 256 MB
Submit: 819  Solved: 192
[ Submit][ Status][ Web Board]

Description

大家都知道回文数是正着读与反着读是一样的数,比如121,12321。

现在定义S是一个数的各个位数字的和,比如121 的和是4。

请你求出位数为5或6并且各位数字和为S的所有回文数字。

Input

第一行输入一个T 表示有T组样例(T<1000)。

接下来T行每行输入一个S(0<S<100)。

Output

对于每组样例,第一行输出Case x: 表示第x组样例

接下来输出符合条件的回文数,要求从小到大排序。如果没有符合条件的,请输出-1

Sample Input

24460

Sample Output

Case 1:99899499994589985598895679976688886697796769967778877787787796697859958868868877778886688895598949949958859967769976679985589994499Case 2:-1

HINT

Append Code

[ Submit][ Status][ Web Board]
这道题有点坑点,本菜鸡是打表干的,但是wa50%,后来直接暴力1到60才发现,里面有的没有-1,(wa思路:先找到不是0的位置,然后再顺次输出......)
这里举几个板栗:53,51,49,47。可以验一下。下面贴代码(应该对了......)
#include <stdio.h>//回文打表
#include <stdlib.h>
#include<string.h>
int s[53][105];
int panduan(int i)
{
    int a;
    if(i/100000==0)a=5;
    else a=6;
    if(a==5)
    {
        if(i/10000!=i%10)return 0;
        if(i/10%10!=i%10000/1000)return 0;
    }
    else if(a==6)
    {
        if(i/100000!=i%10)return 0;//首位
        if(i/10000%10!=i/10%10)return 0;//第二位
        if(i/1000%10!=i/100%10)return 0;//第三位
    }
    return 1;
}
int dabiao(int n)
{
    memset(s,0,sizeof(s));
    int a=10001;
    int cnt=0,b,i,e;
    for(i=a; i<=999999; i++)
    {
        if(panduan(i)==0)continue;
        b=i;
        cnt=0;
        while(b!=0)
        {
            cnt+=b%10;
            b/=10;
        }
        for(e=0; s[cnt+2][e]!=0; e++);//找到不是0的位置
        s[cnt+2][e]=i;
    }
    return 0;
}
int main()
{
    //freopen("in.txt","r",stdin);
    int n,n1;
    int a;
    dabiao(54);
    int i;
    scanf("%d",&n);
    for(n1=1; n1<=n; n1++)
    {
        printf("Case %d:\n",n1);
        scanf("%d",&a);
        if(a>54||a<2)
        {
            printf("-1\n");
            continue;
        }
        if(s[a+2][0]==0){
                printf("-1\n");
        continue;
        }
        for(i=0; s[a+2][i]!=0; i++)
        {
            printf("%d\n",s[a+2][i]);
        }
    }
    return 0;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值