首先回顾本题
求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a是一个数字,为2。 例如,n=5时=2+22+222+2222+22222,n由键盘输入。
首先我们第一反应必然是循环,那么如何通过循环求解就是一个比较重要的问题了。
第一步,列好C语言的基本格式:
#include<stdio.h>
int main(){
return 0;
}
第二步,确认变量,首先需要一个输入值,我们将其设置为n,需要一个输出值,我们设置为sum,再加上最后控制循环的变量i。三个变量就找到了,于是我们可以写出
#include<stdio.h>
int main(){
int n, i, sum = 0;
scanf("%d", &n);
for(i = 0; i < n; i++){
}
return 0;
}
相比有的同学很好奇为什么只用一个循环,而不是通过循环先求出单个的2, 22,222,2222,22222。然后再通过循环累加。这是因为其中存在着规律~
从规律中,我们可以看到,个位的2出现过n次,而十位的出现过n-1次以此类推!
这意味着其中有规律,有规律就意味着可以简化!
于是我们思考一下,是否可以从最高为开始,比如说最高位只有一个2,然后两个,三个……
是的,我们可以用公式来归纳!
于是我们从最高为开始,依次补足!
#include<stdio.h>
int main(){
int n, i, sum = 0;
scanf("%d", &n);
for(i = 0; i < n; i++){
sum *= 10;
sum += 2 * (i+1);
}
printf("%d", sum);
return 0;
}
这样我们完整的代码就出来了,从最高为开始一点一点的加上去,包括i这个控制变量我们都可以利用上,将其作为每个位置上有多少个2相加!
当然这只是我目前能想到的最佳解法,说不定其他人会有更优解呢?
9.5 分
140 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复