解题思路:

这道题可以使用简单的for循环反向推导,设总数为n,则每天都是n/2-1,(n/2-1)/2-1.....反向推回去就是sum=(sum+1)*2,通过这种方式就可以很快得到答案;但是与此同时这道题还是一个经典的递归问题,使用递归也可以很快得到答案,这是因为前面的数的整体和后面的数有直接的关联,递归的结束条件是a == 1。


注意事项:





参考代码:

#include<stdio.h>

int main()

{//简单的方法

     int a;

int i, sum = 1;

scanf("%d",&a);

for(i = 1;i<a;i++)

             sum=(sum+1)*2;

printf("%d",sum);

return 0;

}

//使用递归的方法

#include<stdio.h>

int calculate(int a)

{

return a == 1?1:(calculate(--a)+1)*2;

}

int main()

{

int a;

scanf("%d",&a);

printf("%d",calculate(a));

return 0;

}


点赞(6)
 

0.0分

0 人评分

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

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

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

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

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

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

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

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

评论列表 共有 1 条评论

Top001 7年前 回复TA
小白一枚,求教大咖,return a == 1?1:(calculate(--a)+1)*2;能解释下么?这种表达式的用法和基本格式是什么?