蓝桥杯试题 算法提高 猴子吃桃问题 C/C++

试题 算法提高 猴子吃桃问题

资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
  猴子吃桃问题:猴子摘下若干个桃子,第一天吃了桃子的一半多一个,以后每天吃了
  前一天剩下的一半多一个,到第n天吃以前发现只剩下一个桃子,
  要求编写函数GetNumber(int n)求出猴子共摘了几个桃子。
输入格式
  输入整数n。
输出格式
  输出整数m。
样例输入
一个满足题目要求的输入范例。
例:
3
样例输出
与上面的样例输入对应的输出。
例:
10
数据规模和约定
  输入的整数2<=n<=30.

思路:本题题中已经说明需要编写一个在GetNumber函数中的求n天桃子的核心代码片段,所以我们可以不用输出,直接用调用过来的n,而题中说第n天剩下一个桃子,说明只需要计算n-1天即可,而题中说明每次都可以平分,说明每天的桃子数量必须为偶数,只要当天的桃子数不为偶数即不符合条件,从桃子数量为1开始挑选,直到n-1次计算完成(必须计算n-1次,有些会只满足一次条件,但这不是所需要的答案),符合条件的即为正确答案。

核心片段代码如下(完整代码在这段代码的下面):

int i=1,j,k;
	while(1){
		i++;
		k=i;
		for(j=0;j<n-1;j++){
			if(k%2==0){
				k=k/2-1;
			} else{
				break;
			}
		}
		if(k==1 && j==n-1){
			break;
		}
	}
	return i;

完整代码如下:

#include <iostream>
#include <fstream>
using namespace std;
void checkAnswer();

/**********Program**********/
int GetNumber(int n)
{
int i=1,j,k;
	while(1){
		i++;
		k=i;
		for(j=0;j<n-1;j++){
			if(k%2==0){
				k=k/2-1;
			} else{
				break;
			}
		}
		if(k==1 && j==n-1){
			break;
		}
	}
	return i;
}
/**********  End  **********/
int main(){
        int n;
        cin>>n;
        cout<<GetNumber(n)<<endl;
}
发布了63 篇原创文章 · 获赞 64 · 访问量 3554

猜你喜欢

转载自blog.csdn.net/weixin_45269353/article/details/104733828