[普及][NOIP1998 普及组] 三连击

题目背景

本题为提交答案题,您可以写程序或手算在本机上算出答案后,直接提交答案文本,也可提交答案生成程序。

题目描述

将 1,2,…,91,2,…,9 共 99 个数分成 33 组,分别组成 33 个三位数,且使这 33 个三位数构成 1:2:31:2:3 的比例,试求出所有满足条件的 33 个三位数。

输入格式

输出格式

若干行,每行 33 个数字。按照每行第 11 个数字升序排列。

样例 #1

样例输入 #1

Copy

样例输出 #1

192 384 576
* * *
...

* * *
(剩余部分不予展示)

题解

这道题就直接枚举 �a,�=2�,�=3�b=2a,c=3a,然后判断,就是把这几个数放进数组排序,如果按顺序就对了。

#include <bits/stdc++.h>
using namespace std;
bool check(int a, int b, int c)
{
    int p1 = a / 100 % 10, p2 = a / 10 % 10, p3 = a / 1 % 10;
    int p4 = b / 100 % 10, p5 = b / 10 % 10, p6 = b / 1 % 10;
    int p7 = c / 100 % 10, p8 = c / 10 % 10, p9 = c / 1 % 10;
    int k[10];
    k[1] = p1;
    k[2] = p2;
    k[3] = p3;
    k[4] = p4;
    k[5] = p5;
    k[6] = p6;
    k[7] = p7;
    k[8] = p8;
    k[9] = p9;
    sort(k + 1, k + 10); // 排序
    return k[1] == 1 && k[2] == 2 && k[3] == 3 && k[4] == 4 && k[5] == 5 && k[6] == 6 && k[7] == 7 && k[8] == 8 && k[9] == 9; // 判断
}
int main()
{
    for (int i = 1; i <= 999; i++)
    {
        if (check(i, i * 2, i * 3))
        {
            printf("%d %d %d\n", i, i * 2, i * 3); // 输出
        }
    }
    return 0;
}
// 其实没啥可写的,1998年的题看代码也能看懂

Copy

��AC ����Code

#include <bits/stdc++.h>
using namespace std;
bool check(int a, int b, int c)
{
    int p1 = a / 100 % 10, p2 = a / 10 % 10, p3 = a / 1 % 10;
    int p4 = b / 100 % 10, p5 = b / 10 % 10, p6 = b / 1 % 10;
    int p7 = c / 100 % 10, p8 = c / 10 % 10, p9 = c / 1 % 10;
    int k[10];
    k[1] = p1;
    k[2] = p2;
    k[3] = p3;
    k[4] = p4;
    k[5] = p5;
    k[6] = p6;
    k[7] = p7;
    k[8] = p8;
    k[9] = p9;
    sort(k + 1, k + 10);
    return k[1] == 1 && k[2] == 2 && k[3] == 3 && k[4] == 4 && k[5] == 5 && k[6] == 6 && k[7] == 7 && k[8] == 8 && k[9] == 9;
}
int main()
{
    for (int i = 1; i <= 999; i++)
    {
        if (check(i, i * 2, i * 3))
        {
            printf("%d %d %d\n", i, i * 2, i * 3);
        }
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值