• 洛谷-P1618 三连击(升级版)


    题目描述

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

    输入格式

    三个数,A B C。

    输出格式

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

    输入输出样例

    输入 #1

    1 2 3
    

    输出 #1

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

    说明/提示

    保证A<B<C

    题目大意及分析

    题目要求就是在1~9九个数中三个数为一组排列,组成三个三位数,并且需要满足 A:B:C 的比例。

    因为这三个数不能重复选,所以可以得到最小的一个三位数为123。所以就可以从123开始暴力求解了,有两个小细节如下:

    1. 所得到的三位数中不能含有0这个数。
    2. 这个三位数自身元素也不能够重复。

    代码

    #include<iostream>
    #include<algorithm>
    using namespace std;
    
    int main()
    {
        int q,b,c,sum=0,temp;
        cin >> q >> b >> c;
        for(int i=123;i<999;i++)
        {
            int a[10]={0},s=0;
            if(i/q*c>999)
                break;
            if(i%q!=0)
                continue;
            temp = i;//第一个数判断开始;
            for(int n=0;n<3;n++)
            {
                if(temp%10==0||a[temp%10]==1)
                {
                    s=1;
                    break;
                }
    
                a[temp%10]=1;
                temp = temp / 10;
    
            }
            if(s==1) continue;
            int j=i/q*b;
            temp = j;//第二个数判断开始;
            for(int n=0;n<3;n++)
            {
                if(a[temp%10]==0&&temp%10!=0)
                    a[temp%10]=1;
                else
                {
                    s=1;
                    break;
                }
                temp = temp/10;
            }
            if(s==1) continue;
            int k=i/q*c;
            temp = k;//第三个数判断开始;
            for(int n=0;n<3;n++)
            {
                if(a[temp%10]==0 && temp%10!=0)
                    a[temp%10]=1;
                else
                {
                    s=1;
                    break;
                }
                temp = temp/10;
            }
            if(s==1) continue;
            else
            {
                cout << i << " " << j << " " << k <<endl;
                sum++;
            }
        }
        if(sum==0)
        {
            cout << "No!!!" <<endl;
        }
        return 0;
    }
    

    更多内容大家可以访问我的个人博客:一只大大怪

  • 相关阅读:
    spring之aop概念和配置
    netty概念
    maven使用实例记录
    maven概念
    Runtime.getRuntime().addShutdownHook
    aop前传之代理
    实例化bean的三种方式
    easyui datagrid treegrid 取消行选中、取消高亮
    sqlserver 保存 立方米(m³)
    sqlserver 备份集中的数据库备份与现有的 'XXX' 数据库不同。
  • 原文地址:https://www.cnblogs.com/cydi/p/11455669.html
Copyright © 2020-2023  润新知