【问题描述】
一个百万富翁碰到一个陌生人,陌生人找他谈了一个换钱的计划。该计划如下:我每天给你10万,而你第一天给我一元钱,第二天我仍给你十万,你给我二元钱,第三天我仍给你十万,你给我四元钱……你每天给我的钱是前一天的两倍,直到满n(0<=n<=30)天。百万富翁非常高兴,欣然接受了这个契约。请编写一个程序,计算这n天中,陌生人给了富翁多少钱,富翁给了陌生**【输入形式】**
输入天数n(0<=n<=30)
【输出形式】
分行输出这n天中,陌生人所付出的钱和富翁所付出的钱。
【样例输入】
30
【样例输出】
3000000
1073741823
【样例说明】
两人交易了30天,陌生人给了富翁3000000元,富翁给了陌生人1073741823元.
解析:
第二行数据本质上就是等比数列求和。为了练习循环结构,我还是先老老实实地写一下代码。
#include<iostream>
using namespace std;
int main()
{
int n,o=1,ans=0;
cin>>n;
cout<<n*100000<<endl;
for(int i=1;i<=n;i++)
{
ans+=o;
o*=2;
}
cout<<ans<<endl;
}
当然,由于高中数学学过等比数列求和,也可以直接写结果。不过这样就起不到练习循环结构的效果。
#include<iostream>
#include<cmath>
using namespace std;
const int q=2;
int main()
{
int n,Sn;
cin>>n;
cout<<n*100000<<endl;
Sn=(1-pow(2.0,n-1)*q)/(1-q);
cout<<Sn<<endl;
}
知识就是力量。不要做一个傻瓜富翁!
真是:
书到用时方恨少,是非经过不知难。