解题思路:这个题目并不难,实际上本质就是1+11+111+1111+......,最后结果别忘乘以2就行了。那么1 11 111这串数列并非是等比或者等差数列,这一点千万不要弄混,也就是不能直接硬套高中数列求和公式,要找到它们的递推关系:相邻两项差距是10的(n-1)次幂,所以设置两个变量,一个用来表述前后相邻项的递推,一个用来累加求Sn,用一个简单的for循环即可。
但是有一个关键点在于a1,它等于1是不满足递推公式的,必须额外写出来分类讨论,在代码中表现为在n=1的时候加一个if逻辑判断。请注意这里是一个易错点,很多小白往往会忽视n=1的特殊情况,如果代码中少了这一段,那么就只对n>=2的情况才成立了,是有可能被系统判错的!!!
注意事项:千万千万别忘了n=1
参考代码:
#include<stdio.h>
#include<math.h>
#include <string.h>
int main()
{
int a=0,i=1;//a即为数列某一项an
int n;//n是输入值,表示有n个1
int s=0;//s即为sn
scanf("%d",&n);
for(i=1;i<=n;i++){
if(i==1){
a=1;
s=1;
}//单独讨论n=1
else {
a=a+pow(10,(i-1));
s=s+a;
}
}
printf("%d",2*s);//最后别忘了*2
return 0;
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复