zoukankan      html  css  js  c++  java
  • 题解【洛谷P1618】 三连击(升级版)

    设三个数分别为n1、n2、n3,因为三个数的比为A:B:C,取一份量i,使得A·i=x,B·i=y,C·i=z(·是*的意思)。

    所以我们的代码只需要枚举i,并以此判断n1、n2、n3是否为三位数且包含1-9这九个数字即可。

    判断是否包含1-9可以用p数组记录每个数字是否出现过,1为出现,0为没出现。

    于是我们有了下列代码:

    #include<bits/stdc++.h>
    using namespace std;
    int p[11];//记录是否包含1-9
    void cf(int x){//分解出这个数的各个数位
        while(x>0){//如果这个数还有数位
            p[x%10]=1;//记录这个数位
            x/=10;//除以十,记录下一数位
        }
    }
    int a,b,c,n1,n2,n3,m,i,j,k,l;
    int main()
    {   k=0;//判断有没有解
        scanf("%d%d%d",&a,&b,&c);//输入比例
        for(i=1;i<=999;i++){//枚举i
            memset(p,0,sizeof(p));//p数组清零
            r=1;//判断变量
            n1=i*a;
            n2=i*b;
            n3=i*c;//计算三个数
            if(n1<100 || n2<100 || n3<100 || n1>999 || n2>999 || n3>999)break;//如果不是三位数就退出循环
            cf(n1);cf(n2);cf(n3);//依次拆分各个数字
            for(j=1;j<=9;j++){//是否1-9这九个数字都有
                if(p[j]==0)r=0;//如果没有,判断变量值记为0
            }
            if(r==1){//如果这三个数有解
                k=1;//判断有没有解的变量值记为1
                printf("%d %d %d
    ",n1,n2,n3);//输出各个数
            }
        }
        if(k==0)printf("No!!!");//如果1个解都没有,则输出“No!!!”
        return 0;//结束
    }
  • 相关阅读:
    linux学习笔记(十四)
    linux学习笔记(十三)
    linux学习笔记(十二)
    linux学习笔记(十一)
    linux学习笔记(十)
    linux学习笔记(九)
    linux学习笔记(八)
    linux学习笔记(七)
    linux学习笔记(六)
    linux学习笔记(五)
  • 原文地址:https://www.cnblogs.com/xsl19/p/10414775.html
Copyright © 2011-2022 走看看