HDU 2013 (水)

时间:2023-11-11 22:23:32

题目链接: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“ )