(洛谷)题目题号P1008 [NOIP1998 普及组] 三连击

Hello大家好我是小亦也见面啦qwq,今天我么来讲的题目是来自NOIP1998年普及组的题目,非常非常的简单啊,我第一次写得时候不到10行搞定,纯防水嘛(不过是很久以前的题目了)话不多说继续给思路qwq:

首先呢老样子这道题的就纯一个然后没了。。好吧赶紧把步骤写一下。。qwq

步骤1:理解比例要求

首先,理解题目中的比例要求。如果有三个数 aa、bb 和 cc,满足 b=2ab=2a 且 c=3ac=3a,则它们的比例是1:2:3。

步骤2:生成所有可能的三位数组合

我们需要生成所有可能的三位数组合,这些数字来自集合 {1, 2, ..., 9}。由于每个数字只能使用一次,我们可以使用全排列来实现。

步骤3:检查比例条件

对于每个生成的三位数组合,我们需要检查它们是否满足1:2:3的比例条件。具体来说,我们需要检查:

  • 第二个数是否是第一个数的两倍。
  • 第三个数是否是第一个数的三倍。

步骤4:去重

由于题目要求相同大小的整数只计算一次,我们需要确保在检查比例条件时,不会重复计算相同的组合。

步骤5:输出结果

将所有满足条件的三位数组合输出。按照题目要求,需要按照第一个数字升序排列。

实现思路

  1. 使用全排列:使用 next_permutation 函数生成1到9的全排列,这样可以确保每个数字恰好使用一次。

  2. 计算三位数:对于每个排列,将其分成三组,每组形成一个三位数。

  3. 检查比例:对于每个三位数组合,检查是否满足1:2:3的比例。

  4. 存储和输出:将满足条件的组合存储起来,并在最后按要求输出。

注意事项

  • 确保在计算三位数时不会越界(即确保每个组合的数字都在1到9之间)。
  • 使用 next_permutation 函数时,需要包含 <algorithm> 头文件。

然后呢我会提供两串代码第一个是第一次写的时候搞简单了第二个我搞多了已下并写了注释放心食用#^.^#

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

int main() {
    // 存储1到9的数字
    int nums[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
    int a, b, c;

    // 遍历所有可能的组合
    do {
        // 计算三个数
        a = 100 * nums[0] + 10 * nums[1] + nums[2];
        b = 100 * nums[3] + 10 * nums[4] + nums[5];
        c = 100 * nums[6] + 10 * nums[7] + nums[8];

        // 检查是否满足1:2:3的比例
        if (b == 2 * a && c == 3 * a) {
            cout << a << " " << b << " " << c << endl;
        }
    } while (next_permutation(nums, nums + 9)); // 使用next_permutation获取下一个排列

    return 0;
}

等一下完辣只能给一串代码QWQ算了还是给我现在写的吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值