• 洛谷 P1008 三连击


                  

            用1,2,……,9组成的三位数,已得知最小数为123;最大为987。因为组成的三个三位数要满足1:2:3的关系,若987占其中3份,

    则一份为987/3,也就是329。所以,用for循环的话,只用定义i(占一份的数)从123到329循环。(若i>329,则占三份的数3i>987,不符合题意)

            我的先将三个数定义为 i,2i,3i。这样就先满足了三个数的比例关系。我之后就没什么好办法,让i从123到329循环一次,定义一个一维数组,分别存储每组数据中每个数各个数位上的数。

            再判断各个数位上的数相加是否为45(1+2+3+......+9),这样也有很多例外,所以我又判断了一次各个数位相乘是否为1*2*3*......*9的值,若两项都符合,则输出。

     1 #include<iostream>
     2 using namespace std;
     3 int main()
     4 {
     5     int a,b,c,x[10],s=0,d=1;
     6     for(int i=123;i<=329;++i)
     7     {
     8         a=i;
     9         b=2*i;
    10         c=3*i;
    11         x[1]=a%10;
    12         x[2]=a/10%10;
    13         x[3]=a/100;
    14         x[4]=b%10;
    15         x[5]=b/10%10;
    16         x[6]=b/100;
    17         x[7]=c%10;
    18         x[8]=c/10%10;
    19         x[9]=c/100;
    20         for(int j=1;j<=9;++j)
    21         {
    22             s+=x[j];
    23             d*=x[j];
    24         }
    25         if(s==45 && d==1*2*3*4*5*6*7*8*9){
    26           cout<<a<<" "<<b<<" "<<c<<endl;}
    27         s=0;
    28         d=1;
    29     }
    30     return 0;
    31 }

    最终代码  ☝ ☝ ☝ ㊤ ㊤ ㊤ ↑ ↑ ↑

            

  • 相关阅读:
    2017ecjtu-summer training # 9 HDU 4544
    2017ecjtu-summer training #6 Gym 100952D
    HDU 1241 DFS
    集训队选拔赛 day4
    Educational Codeforces Round 67 (Rated for Div. 2)
    Codeforces Round #566 (Div. 2)
    Codeforces Round #567 (Div. 2)
    Codeforces Round #568 (Div. 2)
    Codeforces Round #569 (Div. 2)
    牛客练习赛48
  • 原文地址:https://www.cnblogs.com/zkw666/p/12252515.html
Copyright © 2020-2023  润新知