【ACM之旅】特殊的数字2 (回文数)

一、[题目] 特殊的数字2 (回文数)

时间限制:1.0s   内存限制:512.0MB

问题描述

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

输入格式

输入一行,包含一个正整数n (1<=n<=54)。

输出格式

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

样例输入

52 

样例输出

899998
989989
998899


二、[代码]:

PS. 特殊的数字2 (回文数) 是一道与数学规律相结合的初级趣味题目,其需要解题者能正确理解特殊数的特征并将其利用一定算法输出,只要理解题目解出这道题其实并不困难。

算法一:利用特殊数的特征结合算法解题

代码1:

#include <stdio.h>
#include <stdlib.h>
#define A(X) ((t[X]-'0'))
int main()
{
  char t[3];
  int N;
  scanf("%d",&N);
  for(int i=100;i<1000;i++){
    itoa(i,t,10);
    if((A(0)+A(1))*2+A(2)==N)
      printf("%c%c%c%c%c\n",t[0],t[1],t[2],t[1],t[0]);
  }
  for(int i=100;i<1000;i++){
    itoa(i,t,10);
    if((A(0)+A(1)+A(2))*2==N)
      printf("%c%c%c%c%c%c\n",t[0],t[1],t[2],t[2],t[1],t[0]);
  }
  return 0;
}

代码2:

#include <stdio.h>
#include <stdlib.h>
#define A(X) ((t[X]-'0'))
int main()
{
  char t[7];
  int N;
  scanf("%d",&N);
  for(int i=10000;i<1000000;i++){
    itoa(i,t,10);
    if(N==(i<100000?((A(0)+A(1))*2+A(2)):(A(0)+A(1)+A(2))*2)
      &&(i<100000?(t[0]==t[4]&&t[1]==t[3]):(t[0]==t[5]&&t[1]==t[4]&&t[2]==t[3])))
      printf("%s\n",t);
  }
  return 0;
}

欢迎评论和转载,转载请注明文章出处,我对此表示最真诚的敬意!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值