自学内容网 自学内容网

【分西瓜】

题目描述

这是个著名的数学问题,原题是:一筐西瓜,三个人分,第一个人拿走全部的一半又再多拿走一个,第二个人拿走剩下的一半又再拿走一个,第三个人拿走剩下的一半又再拿走一个。刚好分完,问这筐西瓜有几个?

我认为博学多才的你一定知道这个问题的计算方法。我是计算机老师,当然想让你用计算机解决更在数据范围的问题。现在的问题是: 一筐西瓜,N个人分,第一个人拿走全部的一半又1个,第二个人拿走剩下的一半又1个,第三个人拿走剩下的一半又1个,如此下去,第N个人也如此,则西瓜刚好分完,问这筐西瓜有几个?

输入格式

第一行1个整数n,范围在[1,15]。

输出格式

只一个整数,这筐西瓜的总数。

样例输入/输出

输入数据 1

2

输出数据 1

6

数据规模与提示

时间限制:1000ms.

内存限制:256MB.

题解:

这道题的思路和原题类似,只是要根据题目中的描述修改一下算法。

我们可以使用一个变量sum来表示筐中西瓜的数量,初始值为0。然后,我们从第一个人到第N个人依次循环,每次将sum加1,然后乘以2。

最后,输出sum的值即可。

C++代码如下:

#include<bits/stdc++.h>
using namespace std;
int main()
{
long long n,sum=0; 
cin>>n;
for(int i=1;i<=n;i++) 
{
sum++;
sum*=2; 
}

cout<<sum;


return 0;
}

时间复杂度分析:

该算法的时间复杂度为O(n),其中n为人数。因为循环的次数与n线性相关。

空间复杂度分析:

该算法的空间复杂度为O(1),只需要使用一个sum变量来保存筐中西瓜的数量。

点个赞吧,帅哥美女们,本人为小学生。


原文地址:https://blog.csdn.net/gcliyilin/article/details/142532294

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!