解题思路:这个题目并不难,实际上本质就是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分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论