• P1618 三连击(升级版)


    题目描述

    将1,2,…,9共9个数分成三组,分别组成三个三位数,且使这三个三位数的比例是A:B:C,试求出所有满足条件的三个三位数,若无解,输出“No!!!”。
    //感谢黄小U饮品完善题意

    输入输出格式

    输入格式:

    三个数,A B C。

    输出格式:

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

    输入输出样例

    输入样例#1:

    1 2 3

    输出样例#1:

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

    说明

    保证A<B<C


    //P1618 三连击(升级版)
    // 打表就行啦
    #include <iostream>
    #include <vector>
    
    using namespace std;
    double num[1024];
    int count = 0;
    void prev() {
    	for (int i = 1; i < 10; i++) {
    		for (int j = 1; j < 10; j++) {
    			for (int k = 1; k < 10; k++) {
    				if (i != j && i != k && j != k) {
    					num[::count++] = i * 100.0 + j * 10 + k;
    				}
    			}
    		}
    
    	}
    }
    
    // 找相同数字的好思路
    bool check(int a, int b, int c) {
    	int temp[10] = {false};
    	while (a) {
    		temp[a % 10] = true;
    		a /= 10;
    
    		temp[b % 10] = true;
    		b /= 10;
    
    		temp[c % 10] = true;
    		c /= 10;
    	}
    	for (int i = 1; i < 10; i++) {
    		if (temp[i] == false)
    			return false;
    	}
    	return true;
    }
    
    void swap(int &num1, int& num2) {
    	int t;
    	t = num1; num1 = num2; num2 = t;
    }
    typedef struct stg_def {
    	int num1;
    	int num2;
    	int num3;
    	bool isHave;
    	stg_def() :num1(-1),num2(-1),num3(-1),isHave(false){}
    	void sort() {
    		if (num1 > num2)
    			swap(num1, num2);
    		if (num1 > num3)
    			swap(num1, num3);
    		if (num2 > num3) {
    			swap(num2, num3);
    		}
    	}
    } stg;
    
    int main() {
    	vector<stg> vec;
    	prev();
    	double a, b, c;
    	bool isHave = false;
    	cin >> a >> b >> c;
    	
    	for (int i = 0; i < ::count; i++) {
    		for (int j = 0; j < ::count; j++) {
    			if (i == j) continue;
    			//  y * a          b * x
    			if (::num[j] * a == b*::num[i]) {
    				stg temp;
    				temp.num1 = num[i];  // x
    				temp.num2 = num[j];  // y
    				vec.push_back(temp);
    			}
    		}
    	}
    
    	for (auto it = vec.begin(); it != vec.end(); it++) {
    		for (int i = 0; i < ::count; i++) {
    			if (b*::num[i] == c*it->num2 && a*::num[i] == c*it->num1) {
    				it->isHave = true;
    				it->num3 = num[i];
    				break;
    			}
    		}
    	}
    
    	for (auto it = vec.begin(); it != vec.end(); it++) {
    		if (it->isHave == true && check(it->num1, it->num2,it->num3)) {
    			it->sort();
    			isHave = true;
    			cout << it->num1 << " " << it->num2 << " " << it->num3 << endl;
    		}
    	}
    	if (isHave == false) {
    		cout << "No!!!" << endl;
    	}
    	return 0;
    }
    
  • 相关阅读:
    4 stackstorm定时器基础 Sky
    3 stackstorm rule Sky
    2 stackstrom action Sky
    1 StackStorm介绍 Sky
    stackstorm安装 Sky
    stackstorm webui安装 Sky
    3.8 Go之并发和并行
    3.2 Go之语言竞争状态
    3.2 Go之语言并发通信
    图床_typora设置.md
  • 原文地址:https://www.cnblogs.com/laohaozi/p/12537724.html
Copyright © 2020-2023  润新知