【洛谷 P1618】三连击(升级版)题解(循环枚举+全排列)

简介: 该编程题目要求将数字1到9分为三组,形成三个三位数,使得这三个数成比例A:B:C。输入为A、B、C的值,输出符合条件的三位数组合,按首个数字升序排列。样例输入为1 2 3,输出多组解。代码使用全排列遍历数字,检查比例关系。若无解,则输出"No!!!"。

三连击(升级版)

题目描述

将 $1, 2,\ldots, 9$ 共 $9$ 个数分成三组,分别组成三个三位数,且使这三个三位数的比例是 $A:B:C$,试求出所有满足条件的三个三位数,若无解,输出 No!!!

//感谢黄小U饮品完善题意

输入格式

三个数,$A,B,C$。

输出格式

若干行,每行 $3$ 个数字。按照每行第一个数字升序排列。

样例 #1

样例输入 #1

1 2 3

样例输出 #1

192 384 576
219 438 657
273 546 819
327 654 981

提示

保证 $A<B<C$。


$\text{upd 2022.8.3}$:新增加二组 Hack 数据。

思路

循环枚举全排列,用乘法判断是否符合比例关系。

AC代码

#include <iostream>
#include <algorithm>
#include <cmath>
#define AUTHOR "HEX9CF"
using namespace std;

int x, y, z;
int a, b, c;
int flg;
int arr[9] = {
   1, 2, 3, 4, 5, 6, 7, 8, 9};

int main() {
   
    cin >> x >> y >> z;
    do{
   
        a = 0;
        b = 0;
        c = 0;
        for (int i = 0; i < 3; i++)
        {
   
            a += arr[i + 0] * pow(10, 2 - i);
            b += arr[i + 3] * pow(10, 2 - i);
            c += arr[i + 6] * pow(10, 2 - i);
        }
        if ((a * y == b * x) && (a * z == c * x) && (b * z == c * y))
        {
   
            cout << a << " " << b << " " << c << endl;
            flg = 1;
        }
    }while(next_permutation(arr, arr + 9));
    if(!flg){
   
        cout << "No!!!" << endl;
    }
    return 0;
}
目录
相关文章
|
5月前
【洛谷 P2089】烤鸡(循环枚举)
烤鸡问题探讨了如何组合10种配料达成特定美味程度。给定正整数$n$代表美味程度,程序需列出所有使得配料总和等于$n$的方案。样例输入11对应10种配料的不同组合,输出显示了10种符合条件的方案。代码通过暴力枚举实现,AC代码展示了如何遍历所有可能的配料质量组合来找到答案。对于100%的数据,$n\leq5000$。
52 0
|
5月前
|
C++
【洛谷 P2241】统计方形(数据加强版)题解(循环枚举)
该题目是1997年普及组的一道编程题,要求计算$n\times m$棋盘中的正方形和长方形数量(不计正方形)。输入包含两正整数$n,m\leq 5000$。输出为一行,两个正整数分别表示正方形和长方形数量。示例输入`2 3`,输出`8 10`。解题思路是将矩形数拆分为正方形数和长方形数,然后通过双重循环计算。AC代码使用C++编写,通过累加方法得出结果。
51 0
|
5月前
质数类判断方法(蓝桥杯,循环分支题型)
质数类判断方法(蓝桥杯,循环分支题型)
|
5月前
|
算法 索引
力扣经典150题第二十六题:判断子序列
力扣经典150题第二十六题:判断子序列
27 0
|
5月前
|
C++
【洛谷 P1618】三连击(升级版)题解(深度优先搜索+位集合)
`三连击(升级版)` 是一道编程题,要求将数字 $1$ 到 $9$ 分成三组,构成三个三位数,其比例为 $A:B:C$。给定 $A$, $B$, $C$,程序应找到所有可能的组合并按首位升序输出。输入为 $A$, $B$, $C$,输出是满足比例的三位数或&quot;No!!!&quot;(当无解时)。解决方案涉及全排列搜索和比例验证。提供的AC代码使用C++,通过位集记录数字使用情况,递归实现全排列。
66 0
|
5月前
【洛谷 P1036】[NOIP2002 普及组] 选数 题解(深度优先搜索+判断质数+枚举子集)
**NOIP2002普及组选数问题**:给定$n$个整数和一个整数$k$,需找出所有$k$个数的组合,计算它们的和为素数的种类数。输入包含$n$和$k$,以及$n$个整数;输出是符合条件的组合数。例如,对于输入`4 3`和数组`[3, 7, 12, 19]`,输出为`1`。代码使用递归枚举子集并检查质数的方法。
63 0
|
存储 算法 Serverless
代码随想录算法训练营第六天 | LeetCode 242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和
代码随想录算法训练营第六天 | LeetCode 242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和
71 0
代码随想录算法训练营第六天 | LeetCode 242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和
|
算法
代码随想录算法训练营第二十八天 | LeetCode 491. 递增子序列、46. 全排列、47. 全排列 II
代码随想录算法训练营第二十八天 | LeetCode 491. 递增子序列、46. 全排列、47. 全排列 II
60 0
|
算法
代码随想录算法训练营第十一天 | LeetCode 20. 有效的括号、LeetCode 1047. 删除字符串中的所有相邻重复项、LeetCode 150. 逆波兰表达式求值
代码随想录算法训练营第十一天 | LeetCode 20. 有效的括号、LeetCode 1047. 删除字符串中的所有相邻重复项、LeetCode 150. 逆波兰表达式求值
62 0
|
算法 安全
代码随想录算法训练营第六天| 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和
代码随想录算法训练营第六天| 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和