题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2013
题目大意:已知最后一天桃子只有一个,告诉你猴崽子第一天吃掉总桃子数的一半多一个,第二天吃掉剩下总数的一半多一个,给你剩下一个桃子事件是在第 n 天发生的,求桃子总数
解题思路:
很水,想一下就出来了
方法一:for 倒着推
方法二:简单基本递归入门
代码:
方法一:
#include<iostream>
#include<cmath>
#include<iomanip>
//#include<algorithm>
using namespace std;
int num;
int main()
{
int n;
int sum;
int p;
while(cin >> n)
{
sum = ;
p = ;
for(int i = ; i < n - ; i ++)
{
sum += (p + ) * ;
p = sum;
sum = ;
}
cout << p << endl;
}
}
方法二:
#include<stdio.h>
int n;
int tao(int cur) {
if(cur == n) return ;
return *(tao(cur+)+);
}
int main() {
while(scanf("%d", &n)!=EOF) {
printf("%d\n", tao());
}
return ;
}
总感觉for 写的蠢蠢的,不知道该怎么修改优化~喵喵喵?
****************************更新****************************(优化方法一的 for 写法)
#include<iostream>
#include<cmath>
#include<iomanip>
//#include<algorithm>
using namespace std;
int num;
int main()
{
int n;
int sum = ;
while(cin >> n)
{
sum = ;
for(int i = ; i < n - ; i ++)
{
sum = (sum + ) << ;
}
cout << sum << endl;
}
}
基本移位操作:“<< n” 乘以 2n ( 空出地方补 “0”)
“>> n” 除以 2n (正数空出地方补 “0” 负数补 ”1“ )