K 跳楼梯

这篇文章讨论了一个关于爬楼梯的问题,给定初始楼层和每一步可以向上或下一层,目标是找到到达特定楼层所需的最小操作次数。通过编程实现,利用累加和的性质简化问题,给出了一段C++代码来解决此问题。
摘要由CSDN通过智能技术生成

题目描述

飞云现在终于到达了教室,他需要爬n层楼梯,假设他现在处于第x层,正在进行第k次操作,可以做出以下 两种操作之一:

        移动到x+k层

        移动到x-1层

假设这栋楼无限大(意味着有负无穷和正无穷层),试求到达第 层的最小操作次数。

最开始飞云处在第0层。

输入格式

第一行一个整数 表示测试案例数(1<=t<=1000)

每一个测试案例读入一个整数 表示楼层数。(1<=n<=10^{6})

输出格式

输出一行一个正整数表示答案

输入输出样例

样例输入 #1

5
1
2
3
4
5

样例输出 #1

1
3
2
3
4

样例解释

在第一个测试案例,只需要1次,从0跳到1. 在第二个测试案例,至少需要三次。 第一次,从0跳到1. 第二次,从1跳到3 第三次,从3跳到2。

题干分析

将1,2,3,4,5,……依次相加,设和为sum。其中任意一个数可以替换成-1,则n个数的情况下,可以达到的数为1~sum-2(除了sum以外,最大是将1替换为-1,这种情况为sum-2)以及sum,除了这些数以外,都是在当前步数count走不到的。

我们不必考虑怎么走才能到规定楼层,只需要知道要走几层就行

代码

本蒟蒻没有写晦涩难懂的函数,就不解释了QAQ

#include<bits/stdc++.h>
using namespace std;
void f(int x)
{
	int k,count=0,sum=0;
	cin >> k;
	for (int i = 1;; i++)
	{
		sum += i;
		if (sum == k || sum - 2 >= k)
		{
			count = i;
			break;
		}
		
	}
	cout << count << endl;
	return ;
}
int main()
{
	int n;
	cin>>n;
	while (n)
	{
		f(n--);
	}
	
	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

平烦..

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值