问题 BT: 美丽数

本文介绍了一个算法问题:如何找到第N个能够被3或5整除的美丽数。通过预先计算并存储这些美丽数的方式,文章提供了一种高效的解决方案,能够快速响应查询请求。

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

题目描述

小明很喜欢3和5这两个数字,他将能被3或5整除的数叫做美丽数。现在给你一个整数N(1<=N<=100000),你能告诉小明第N个美丽数是多少吗?
提示 本题需要打表优化

输入

输入包含多组测试数据。每组输入一个整数N(1<=N<=100000)。

输出

对于每组输入,输出第N个美丽数。

样例输入 Copy

1
2
3
4

样例输出 Copy

3
5
6
9

代码

#include<stdio.h>
int a[210000];
 
void fun()
{
	int i,ans;
	ans = 1;
	for(i = 3; ; i ++)
	{
		if(ans == 100000)
		{
			a[ans] = i;
			return ;
		}	
		if(i % 3 == 0 || i % 5 == 0)
		{
			a[ans] = i;
			ans ++;
		}
	}
	return ;	
}
int main()
{
	int n;
	fun();
	while(scanf("%d",&n) != EOF)
	{
		printf("%d\n",a[n]);
	}
	return 0;
}
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int a[100001];
    int n,i=1,count=0;
    while(scanf("%d",&n)!=EOF)
    {
        while(count<100000)
        {
          if(i%3==0||i%5==0)
          {
              count++;
              a[count]=i;
          }
          i++;
        }
        printf("%d\n",a[n]);
    }
    return 0;
}
### BT::Optional 的用法及在行为树中的作用 #### 1. BT::Optional 的基本概念 `BT::Optional<T>` 是行为树库中的一种模板类,类似于 C++ 标准库中的 `std::optional`。它提供了一种安全的方式来处理可能存在不存在的值[^1]。这种设计可以有效避免使用裸指针带来的空悬指针风险,同时也比直接使用默认值更加语义化灵活。 当某个函的结果可能为空时,返回一个 `BT::Optional<T>` 可以明确表达这一点,并强制调用者显式地检查是否有实际值存在再继续操作。这对于构建健壮的行为树尤为重要,因为在复杂的状态机者决策逻辑中,任何未预期的缺失值都可能导致程序崩溃其他不可预测的行为。 --- #### 2. 使用场景举例 考虑这样一个情况:在一个机器人导航系统里,我们需要获取目标点的位置信息。然而由于地图更新延迟等原因,有时候这个位置可能是暂时无法确定下来的。此时就可以借助 `BT::Optional<Point>` 来封装该位置变量。 下面展示了一个简单的例子来说明如何声明以及判断是否存在有效的选项内容: ```cpp #include <behaviortree_cpp_v3/bt_factory.h> using namespace BT; // 假设 Point 类型已经定义好 struct Point { double x, y; }; Point calculateTargetLocation() { // 实际计算过程省略... return {}; } void moveRobotToDestination(const Optional<Point>& destination) { if (destination.has_value()) { const auto& point = *destination; printf("Moving robot to (%f,%f)\n", point.x, point.y); } else { printf("No valid target location available.\n"); } } int main() { Optional<Point> maybe_target = calculateTargetLocation(); moveRobotToDestination(maybe_target); return 0; } ``` 在这个案例当中,我们首先定义了一个辅助方法用来模拟目的地坐标的获取流程;接着创建了另一个接受可选参作为输入形参的新函负责指挥机械臂按照给定指示前往相应地点 —— 如果传入的对象确实携带了合法值的话就会正常打印消息并执行相应的动作序列;反之则会输出提示告知当前缺乏足够的条件来进行进一步的动作规划[^2]。 --- #### 3. 错误处理与异常捕获 除了单纯的存在性检测之外,`BT::Optional` 还提供了丰富的接口帮助开发者更好地管理控制可能出现的各种错误情形。例如可以通过重载版本的构造器设置自定义初始化标签以便区分不同的缺省原因类别;也可以利用访问器成员函像 `.value_or(default)` 提供备用替代方案等等[^3]。 另外需要注意的一点是尽管引入此类工具能够在一定程度上减少传统意义上频繁使用的三元运算符者是层层嵌套if...else...结构所带来的视觉混乱感,但是过度依赖也可能造成新的维护难题因此应当权衡利弊合理选用。 --- #### 4. 性能考量 最后不得不提一下关于性能方面的因素影响。理论上讲相比起原始基础据类型而言额外增加一层间接层次必然会带来些许开销成本无论是存储空间还是存取时间方面均如此不过考虑到现代编译器优化技术的进步程度再加上绝大多应用场景下涉及的据规模相对较小所以一般情况下完全可以忽略不计除非是在极端苛刻条件下才需要特别关注这方面细节问题[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值