每日一道算法题day-three(备战蓝桥杯)

哈喽大家好,今天来给大家带来每日一道算法题系列第三天,让我们来看看今天的题目,一起备战蓝桥杯

题目:

小 Y的桌子上放着 n 个苹果从左到右排成一列,编号为从 11 到 n。

小苞是小 Y 的好朋友,每天她都会从中拿走一些苹果。

每天在拿的时候,小苞都是从左侧第 11 个苹果开始、每隔 22 个苹果拿走 11 个苹果。

随后小苞会将剩下的苹果按原先的顺序重新排成一列。

小苞想知道,多少天能拿完所有的苹果,而编号为 n 的苹果是在第几天被拿走的?

输入格式

输入的第一行包含一个正整数 n,表示苹果的总数。

输出格式

输出一行包含两个正整数,两个整数之间由一个空格隔开,分别表示小苞拿走所有苹果所需的天数以及拿走编号为 n 的苹果是在第几天。

数据范围

对于所有测试数据有:1≤n≤10^9

解题思路:

1 2 3 4 5 6 7 8

题里说每隔着两个苹果拿走一个,所以这段数字的变化规律就是:

2 3 5 6 8

3 5 8

5 8

5

8

首先观察这个题的数据范围,10的九次方,所以我们不能一一个一个的枚举每次拿的苹果,但我们可以一天一天的枚举

怎么样的一天一天的枚举呢,比如说我们现在有n个苹果,每天可以进行隔一个拿一个的操作,那么模拟下来我们每天大约拿三分之一的苹果,也就是三分之n(n/3)每隔两个苹果拿一个苹果,就是(n+2)/3的上取整,什么是上取整:

上取整:

关于上取整,我们可以通过一个函数来了解:

ceil函数:

功能:把一个小数向上取整
      即就是如果数是2.2 ,那向上取整的结果就为3.000000
原型:double ceil(doube x);
    参数解释:
        x:是需要计算的数
返回值:
    成功:返回一个double类型的数,此数默认有6位小数
    无失败的返回值
头文件:#include<cmath>

使用示范:

#include <iostream>
#include <cmath>

int main() {
	double i = ceil(2.2);
	double j = ceil(-2.2);
	printf("The ceil of 2.2 is %f\n", i);
	printf("The ceil of 2.2 is %f\n", j);
	system("pause");
	return 0;
}

 运行截图:

好的,现在什么是上取整都明白了,解题思路也十分清晰,上代码实操吧!!!

解题代码:

#include <iostream>
#include <cmath>
using namespace std;

int main() {
	int n;
	cin >> n;
	int cnt = 0, data = 0;
	while (n) {

		cnt++;
		if (!data && n % 3 == 1)
			data = cnt;
		n -= ceil((n + 2) / 3);
	}
	cout << data << " " << cnt;
	return 0;
}

代码就是根据思路写的,大家如果还有什么不明白的,就在评论里指出吧

觉得有帮助的同学点点关注吧,跟着作者一起备战蓝桥杯,拿下该死的奖!!!

明天见

  • 12
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
以下是刷算法备战蓝桥杯的一些建议和步骤: 1. 熟悉蓝桥杯的考试内容和型。了解蓝桥杯的考试规则、目类型和难度分布,可以从蓝桥杯官方网站或者相关的参考资料中获取这些信息。 2. 学习基础知识。蓝桥杯目通常涉及到算法和数据结构的基础知识,例如数组、链表、栈、队列、树、图、排序算法、查找算法等。建议先学习这些基础知识,掌握它们的原理和常见的应用场景。 3. 刷练习。通过刷来提高算法和编程能力是非常重要的。可以选择一些经典的算法目进行练习,例如ACM/ICPC、LeetCode、牛客网等平台上的目。刷的过程中要注重理解目的要求,分析问的解决思路,编写代码实现解决方案,并进行调试和测试。 4. 参加模拟考试。蓝桥杯的模拟考试可以帮助你熟悉考试的流程和目类型,也可以检验你的学习成果。参加模拟考试后,可以分析自己的得分情况,找出自己的不足之处,并进行针对性的复习和提高。 5. 学习优秀的解思路和代码。在刷的过程中,可以学习一些优秀的解思路和代码,了解不同的解方法和技巧。可以通过查阅相关的参考书籍、博客、论坛等获取这些信息。 6. 多做实战训练。除了刷,还可以参加一些实战训练,例如参加ACM/ICPC比赛、编程竞赛等。这些实战训练可以提高你的编程能力和解速度,也可以锻炼你的团队合作和应对压力的能力。 7. 多与他人交流和讨论。与他人交流和讨论可以帮助你更好地理解和掌握算法和编程知识。可以加入一些算法学习群组、论坛或者参加一些线下的学习活动,与其他学习者一起交流和分享经验。 8. 坚持练习和复习。刷算法是一个长期的过程,需要坚持不懈地练习和复习。每天保持一定的学习时间,不断积累和提高自己的算法和编程能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

贰月磐石

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

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

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

打赏作者

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

抵扣说明:

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

余额充值