遵贵


私信TA

用户名:dotcpp0788485

访问量:43

签 名:

等  级
排  名 41846
经  验 336
参赛次数 1
文章发表 6
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

TA的其他文章

题目描述

观察数字:12321,123321  都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的。这样的数字叫做:回文数字。

本题要求你找到一些5位或6位的十进制数字。满足如下要求:
该数字的各个数位之和等于输入的整数。

输入格式

一个正整数  n  (10< n< 100),  表示要求满足的数位和。

输出格式

若干行,每行包含一个满足要求的5位或6位整数。 
数字按从小到大的顺序排列。 
如果没有满足条件的,输出:-1 

样例输入

复制

44

样例输出

复制

99899
499994
589985
598895
679976
688886
697796
769967
778877
787787
796697
859958
868868
877778
886688
895598
949949
958859
967769
976679
985589
994499


解题思路:

我们使用一个全局变量来计数,全局变量初始化为0

需要写两个函数,第一个函数是将数字拆开,用一个数组保存,调用函数二。

第二个函数是判断一个数是不是回文数并且是否满足各个位数的和是否等于正整数n,如果条件均满足就输出这个数,并计数。

在main函数中使用for循环调用函数一,把满足条件的输出。

如果没有输出,即全局变量c为0。就输出-1。

具体代码如下

#include<stdio.h>

int c=0;//全局变量c

void judge2(int i,int a[6],int b)


if(a[5]==0)//如果为5位数

{

if(a[0]==a[4]&&a[1]==a[3]&&(a[0]+a[1]+a[2]+a[3]+a[4]==b))//判断是否满足条件

{printf("%d\n",i);c++;

}

}

else

if(a[0]==a[5]&&a[1]==a[4]&&a[2]==a[3]&&(a[0]+a[1]+a[2]+a[3]+a[4]+a[5]==b))//如果为6位数,判断是否满足条件

{printf("%d\n",i);c++;

}

}

int judge1(int i,int b)

{

int a[6];

a[0]=i%10;//个位

a[1]=i/10%10;//十位数

a[2]=i/100%10;//百位数

a[3]=i/1000%10;//千位

a[4]=i/10000%10;//万位

if(i>9999&&i<1000000)//是否为6位数

a[5]=i/100000%10;//十万位

else

a[5]=0;

judge2(i,a,b); //调用函数

}

int main()

{

int a;

scanf("%d",&a);

int i;

for(i=10000;i<1000000;i++)

judge1(i,a);

if(c==0)//如果没有输出,就输出-1。

printf("-1") ;

return 0;


 

0.0分

1 人评分

  评论区

  • «
  • »