首页 > 其他分享 >P1618 三连击(升级版)

P1618 三连击(升级版)

时间:2024-02-15 22:00:44浏览次数:21  
标签:连击 string int charSet 样例 combined P1618 升级版

三连击(升级版)

题目描述

将 \(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 数据。

2.题解

2.1 set集合去重 + 字符化处理

思路

这里采用三重循环枚举第一个数,后面的两个数根据比例即可算出
最重要的是如何检验后面算出的两个数和第一个数这三个数没有重复的数字!!!

代码

#include<bits/stdc++.h>
using namespace std;
bool hasDuplicateDigits(int num1, int num2, int num3){
	set<char> charSet;
	string combined = to_string(num1) + to_string(num2) + to_string(num3);
    for (char ch : combined) {
        charSet.insert(ch);
    }
	return charSet.size() == combined.length() && charSet.find('0') == charSet.end(); // 防止其中混入 0 
}

int main(){
	int A, B, C, count = 0;
	cin >> A >> B >> C;
	// 任何一个为 0 时,均不可能存在 
	if (A == 0 || B == 0 || C == 0) {
		cout << "No!!!";
		return 0;
	}
	for(int i = 1; i <= 9; i++){
		for(int j = 1; j <= 9; j++){
			for(int k = 1; k <= 9; k++){
				if(i != j && j != k){
					int fn = i * 100 + j * 10 + k;
					int sn = fn * B / A;
					int tn = fn * C / A;
					if(hasDuplicateDigits(fn, sn, tn)){
						count++;
						cout << fn << ' ' << sn << ' ' << tn << endl;
					}
				}
			}
		}
	}
	if(count == 0) cout << "No!!!";
} 

标签:连击,string,int,charSet,样例,combined,P1618,升级版
From: https://www.cnblogs.com/trmbh12/p/18016672

相关文章

  • 13-xx儿升级版
    day13xx儿升级版本节对于Bella的生成进行深度分析上节基于模拟浏览器的方式实现【python、nodejs、pyexecjs】硬核分析找到内部算法,然后用Python还原实现【Python】地址:https://user.qunar.com/passport/login.jsp1.文本......
  • (五)ADO.NET用窗体应用程序写增删查改(1.1升级版)
    在上一节我们写了一个简单的窗体应用程序增删查改,但只是限制于只能单条增加、修改、删除、查询,今天继续修改代码,让增加这个环节由用户自行输入然后增加。首先新增一个窗体,把数据库表中所需要的字段排版好。一、原“增加”按钮修改紧接着上一节项目,我们只需要把修改按钮事件修......
  • 洛谷题单指南-暴力枚举-P1618 三连击(升级版)
    原题链接:https://www.luogu.com.cn/problem/P1618题意解读:枚举所有三位数的组合情况,判断是否符合比例。解题思路:方法一:枚举第一个数根据题意,目的是寻找三个符合比例的三位数,可以直接枚举第一个,最小是123,最大是987设第一个数为x,三个数的比例关系是a:b:c设另外两个数为y,z那么,根......
  • [NOIP1998 普及组] 三连击
    [NOIP1998普及组]三连击题目背景本题为提交答案题,您可以写程序或手算在本机上算出答案后,直接提交答案文本,也可提交答案生成程序。题目描述将共个数分成组,分别组成个三位数,且使这个三位数构成的比例,试求出所有满足条件的个三位数。输入格式无输出格式若干行,每行个......
  • 【2023年度技术盘点】「年终盘点后端系列」探索服务架构体系的技术风向,构建微服务核心
    文章导航大纲前提背景回顾过去的几年,我们目睹了科技界的快速发展,其势头如同一列驶向前方的高速列车。作为后端开发者,我们见证了每一次技术革新所带来的广阔前景。这些创新不仅深刻影响着我们的工作方式,而且不断引领我们走向未来。随着数字化浪潮的涌现,不同的架构设计理念相互交织,共......
  • openGauss学习笔记-185 openGauss 数据库运维-升级-提交升级/升级版本回退/异常处理
    openGauss学习笔记-185openGauss数据库运维-升级-提交升级/升级版本回退/异常处理185.1提交升级升级完成后,如果验证也没问题。接下来就可以提交升级。说明:一旦提交操作完成,则不能再执行回滚操作。操作步骤以数据库用户(如omm)登录节点。执行如下命令完成升级提交。......
  • 哥德巴赫猜想(升级版)
    思路:先用素数筛把20000以内的素数筛出来,然后枚举两个素数//哥德巴赫猜想(升级)#include<bits/stdc++.h>usingnamespacestd;constintN=20005;bitset<N>vis;vector<int>p;voidprime(){ vis[1]=1; vis[0]=1; for(inti=2;i<=sqrt(N);i++){ if(!vis[i]){ p.push_......
  • CLIP的升级版Alpha-CLIP:区域感知创新与精细控制
    为了增强CLIP在图像理解和编辑方面的能力,上海交通大学、复旦大学、香港中文大学、上海人工智能实验室、澳门大学以及MThreadsInc.等知名机构共同合作推出了Alpha-CLIP。这一创新性的突破旨在克服CLIP的局限性,通过赋予其识别特定区域(由点、笔画或掩码定义)的能力。Alpha-CLIP不仅保......
  • 升级版皮卡丘
    importturtledefgetPosition(x,y):turtle.setx(x)turtle.sety(y)print(x,y)classPikachu:def__init__(self):self.t=turtle.Turtle()t=self.tt.pensize(3)t.speed(9)t.ondrag(getPo......
  • #P1031. 三连击
    next_permutation全排列公式数据不大,直接暴力全排列模拟出数据即可usingnamespacestd;intp[9]={1,2,3,4,5,6,7,8,9};intmain(){ inta,b,c; cin>>a>>b>>c; intcnt=0; do{ intx=p[0]*100+p[1]*10+p[2]; inty=p[3]*100+p[4]*10+p[5]; intz=p[6]*100+p[7]*10+......