2 条题解

  • 0
    @ 2026-7-20 1:42:33

    P1008 [NOIP 1998 普及组] 三连击——题解

    解题思路

    只需枚举第一个三位数 AA。由比例可直接得到 B=2AB=2AC=3AC=3A。把三个数的九个数位统计起来,检查 1 到 9 是否各出现一次且 0 没出现。枚举上限可以取 329,因为 3A3A 仍需是三位数。

    复杂度分析

    枚举数量为常数,时间与空间复杂度均为 O(1)O(1)

    C++17 参考代码

    #include <bits/stdc++.h>
    using namespace std;
    int main(){
        for(int a=123;a<=329;a++){
            int b=2*a,c=3*a;
            int cnt[10]={0},x=a,y=b,z=c;
            while(x){cnt[x%10]++;x/=10;}
            while(y){cnt[y%10]++;y/=10;}
            while(z){cnt[z%10]++;z/=10;}
            bool ok=cnt[0]==0;
            for(int i=1;i<=9;i++) if(cnt[i]!=1) ok=false;
            if(ok) cout<<a<<' '<<b<<' '<<c<<'\n';
        }
        return 0;
    }
    
    • 0
      @ 2026-7-20 1:42:33

      #include <bits/stdc++.h> using namespace std; int main(){ for(int a=123;a<=329;a++){ int b=2a,c=3a; int cnt[10]={0},x=a,y=b,z=c; while(x){cnt[x%10]++;x/=10;} while(y){cnt[y%10]++;y/=10;} while(z){cnt[z%10]++;z/=10;} bool ok=cnt[0]==0; for(int i=1;i<=9;i++) if(cnt[i]!=1) ok=false; if(ok) cout<<a<<' '<<b<<' '<<c<<'\n'; } return 0; }

      • 1

      信息

      ID
      4913
      时间
      2000ms
      内存
      256MiB
      难度
      10
      标签
      递交数
      1
      已通过
      1
      上传者