描述
五位好朋友相聚。第一位朋友带来了很多糖块赠送给各位朋友,使每人的糖块在各自原有的基础上翻了一倍;接着第二位好友也同样向每人赠送糖块,他同样使每人的糖块在各人已有的数量上翻了一倍;第三、第四、第五位好友都照此办理。经过这样的赠送之后,每人的糖块恰好都为x块。问各位好友原先的糖块数分别是多少?
输入
一个正整数x(保证能被32整除)。
输出
一行,包含五个整数,分别表示五个朋友原先的糖块数,整数间用一个空格分开。
输入样例 1
32
输出样例 1
81 41 21 11 6
提示
32<=x<=2^21
模拟代码:
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int a,b,c,d,e,n;
cin>>n;
a=n;b=n;c=n;d=n;e=n;
e=e+a/2+b/2+c/2+d/2;a=a/2;b=b/2;c=c/2;d=d/2;
d=d+e/2+a/2+b/2+c/2;e=e/2;a=a/2;b=b/2;c=c/2;
c=c+e/2+a/2+b/2+d/2;e=e/2;a=a/2;b=b/2;d=d/2;
b=b+e/2+a/2+d/2+c/2;e=e/2;a=a/2;d=d/2;c=c/2;
a=a+e/2+b/2+d/2+c/2;e=e/2;b=b/2;d=d/2;c=c/2;
cout<<a<<" "<<b<<" "<<c<<" "<<d<<" "<<e;
return 0;
}
数学正解:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int x,k;
scanf("%d",&x);
k=x/32;
x*=5;
printf("%d %d %d %d %d",x/2+k,x/4+k,x/8+k,x/16+k,x/32+k);
return 0;
}