Help is needed for Dexter

在这个游戏中,玩家需要通过一系列策略将屏幕上的数字全部变为0。随着数字范围的增加,完成任务所需的步骤也会相应增加。本博客介绍了一个算法解决方案,该方案能够为任意给定的数字范围找到最小的操作次数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Dexteris tired of Dee Dee. So he decided to keep Dee Dee busy in a game. The game heplanned for her is quite easy to play but not easy to win at least not for DeeDee. But Dexter does not have time to spend on this silly task, so he wantsyour help.

 

Therewill be a button, when it will be pushed a random number N will be chosen bycomputer. Then on screen there will be numbers from 1 to N. Dee Dee can chooseany number of numbers from the numbers on the screen, and then she will commandcomputer to subtract a positive number chosen by her (not necessarily onscreen) from the selected numbers. Her objective will be to make all thenumbers 0.

 

Forexample if N = 3, then on screen there will be 3 numbers on screen: 1, 2, 3.Say she now selects 1 and 2. Commands to subtract 1, then the numbers on thescreen will be: 0, 1, 3. Then she selects 1 and 3 and commands to subtract 1.Now the numbers are 0, 0, 2. Now she subtracts 2 from 2 and all the numbersbecome 0.

 

Dexteris not so dumb to understand that this can be done very easily, so to make atwist he will give a limit L for each N and surely L will be as minimum aspossible so that it is still possible to win within L moves. But Dexter doesnot have time to think how to determine L for each N, so he asks you to write acode which will take N as input and give L as output.

 

Input and Output:

Inputconsists of several lines each with N such that 1 ≤ N ≤ 1,000,000,000. Input will be terminated by endof file. For each N output L in separate lines.

 

SAMPLE INPUT

OUTPUT FOR SAMPLE INPUT

1

2

3

1

2

2

 

Problemsetter:Md. Mahbubul Hasan

分析:

        此题做的时候,如果无从下手的话,先计算一些例子,然后找规律,发现每次处理一半的数据的时候有最小解:即f(n) = f(n / 2) + 1;

代码如下:

#include <cstdio>
int fun(int n)
{
	if (n == 1)
	{
		return 1;
	}
	return fun(n / 2) + 1;
}
int main()
{
	int n;
	while (scanf("%d",&n) == 1)
	{
		printf("%d\n",fun(n));
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值