蓝桥杯 基础练习 特殊回文数(C语言解法)

题目:

资源限制

内存限制:512.0MB   C/C++时间限制:1.0s   Java时间限制:3.0s   Python时间限制:5.0s

问题描述

  123321是一个非常特殊的数,它从左边读和从右边读是一样的。
  输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。

输入格式

  输入一行,包含一个正整数n。

输出格式

  按从小到大的顺序输出满足条件的整数,每个整数占一行。

样例输入

52

样例输出

899998
989989
998899

数据规模和约定

  1<=n<=54。

这里小编是一个入门级新手,第一次独立解决的一个问题,也是第一次发博客,若思路在您看来不好请见谅(叠个小甲QWQ)

思路:首先根据他的要求,一串数字从左读从右读都一样,说明它是对称的,那么我们就可以先构建一个数组,他的数组下标首末位置(递增减)的值对应相等。通过枚举法循环,将对应的值先全列出来,接着再通过if条件语句的嵌套,让他满足题目中的两个条件,最后输出全部的符合条件的数。

以下是具体的代码:

#include<stdio.h>
int main() 
{
    char str[6]; //这里最多是6位数,数组从str[0]开始,增加一个字符用于存储字符串结尾的'\0'
    int i;
    int n;
    scanf("%d",&n);
    
    for(i=10000;i<=99999;i++)   //首先找五位数
    {
        sprintf(str,"%d",i);          //通过sprintf函数,将i的值直接放入对应数组的位置
        if(str[0]==str[4]&&str[1]==str[3])    //对称下标位置的值相等
        {
            if(n==str[0]-'0'+str[1]-'0'+str[2]-'0'+str[3]-'0'+str[4]-'0')

/*

在C语言中,char类型默认是有符号的,因此在计算str[0]+str[1]+str[2]+str[3]+str[4]str[0]+str[1]+str[2]+str[3]+str[4]+str[5]时,会将char类型转换为int类型进行计算。但是,str[0]+str[1]+str[2]+str[3]+str[4]str[0]+str[1]+str[2]+str[3]+str[4]+str[5]的结果可能超出char类型的表示范围,导致溢出。为了解决这个问题,可以将str[0]+str[1]+str[2]+str[3]+str[4]str[0]+str[1]+str[2]+str[3]+str[4]+str[5]的结果转换为int类型再进行比较

 */

          {
                printf("%s\n",str);
            }
        }
        
    }

    for(i=100000;i<=999999;i++)  //随后找六位数与上述同理
    {
        sprintf(str,"%d",i);
        if(str[0]==str[5]&&str[1]==str[4]&&str[2]==str[3])
        {
            if(n==str[0]-'0'+str[1]-'0'+str[2]-'0'+str[3]-'0'+str[4]-'0'+str[5]-'0')
            {
                printf("%s\n",str);    
            }

        }
        
    }
    return 0;
}
 

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值