• 三连击


    题目描述

    1,2,⋯,99个数分成3组,分别组成3个三位数,且使这3个三位数构成1:2:3的比例,试求出所有满足条件的3个三位数。

    例如:192 384 576

    解法1:用字符串解决

    #include <cstdio>
    using namespace std;
    int main(){
        for (int i=123;i<=333;i++){
            char a[4],b[4],c[4];//字符串结束符占用一个字符空间
            sprintf(a,"%d",i);//将int转换为char
            sprintf(b,"%d",i*2);
            sprintf(c,"%d",i*3);
            bool num[10] = {0};
            num[a[0]-48] = true;//ascii码中,0-9对应48-57
            num[a[1]-48] = true;
            num[a[2]-48] = true;
            num[b[0]-48] = true;
            num[b[1]-48] = true;
            num[b[2]-48] = true;
            num[c[0]-48] = true;
            num[c[1]-48] = true;
            num[c[2]-48] = true;
            if (num[0]) continue;//题目要求1-9的数字,出现0即为Wrong Answer
            int count = 0;
            for (int i=0;i<10;i++) if (num[i]) count ++;
            if (count == 9){
                printf("%s %s %s
    ",a,b,c);
            }
        }
        return 0;
    }

     第二种方法:利用C++ STL提供的集合,把得到的三位数逐位放到命名为cache的这个集合(set)里,集合里出现零就跳过,集合元素数够9了就输出

    #include <cstdio>
    #include <set>
    #define INS(x)  cache.insert(x/100); cache.insert(x%100/10); cache.insert(x%10);
    using namespace std;
    int main(){
        for(int a=123;a<=329;a++){
            int b=a*2,c=a*3;
            set<int> cache;
            INS(a)
            INS(b)
            INS(c)
            if(cache.count(0)) continue;
            if(cache.size()==9){
                printf("%d %d %d
    ",a,b,c);
            }
        }
        return 0;
    }

     答案:

    192 384 576
    219 438 657
    273 546 819
    327 654 981
  • 相关阅读:
    面向对象 & sql语句
    MySQL--数据库面试题汇集
    MySQL优化
    JAVA日报
    JAVA日报
    JAVA日报
    JAVA日报
    JAVA日报
    《大道至简》读后感
    JAVA日报
  • 原文地址:https://www.cnblogs.com/litifeng/p/10383743.html
Copyright © 2020-2023  润新知