题目描述
观察数字: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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复