[NOIP1998 普及组] 三连击 C++/Java

洛谷P1008

题目背景

本题为提交答案题,您可以写程序或手算在本机上算出答案后,直接提交答案文本,也可提交答案生成程序。

题目描述

将 $1, 2, \ldots , 9$ 共 $9$ 个数分成 $3$ 组,分别组成 $3$ 个三位数,且使这 $3$ 个三位数构成 $1 : 2 : 3$ 的比例,试求出所有满足条件的 $3$ 个三位数。

输入格式

输出格式

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

样例 #1

样例输入 #1

样例输出 #1

192 384 576
* * *
...

* * *
(剩余部分不予展示)

提示

NOIP1998 普及组 第一题

C++

#include<bits/stdc++.h>
using namespace std;
string temp;
bool flag = false,isgood=true;
signed main() {
    map<char, int> map;
    for (int i = 192; i < 333; i++) {
        for (int j = 384; j < 1000; j++) {
            for (int k = 576; k < 1000; k++) {
                if (i * 2 == j and i * 3 == k) {
                    temp.append(to_string(i)).append(to_string(j)).append(to_string(k));
                    for (auto c: temp) {
                        if (map.count(c) == 0) map[c] = 1;
                        else isgood = false;
                    }
                    if (map.count('0') != 0) isgood = false;
                    if (flag && isgood) cout << "\n";
                    if (isgood) {
                        printf("%d %d %d", i, j, k);
                        if (!flag) flag = true;
                        break;
                    }
                }
            }
        }
    }
}

Java

import java.util.*;

public class Main {
    public static void main(String[] args) {
        boolean flag = false;
        for (int i = 192; i < 333; i++) {
            for (int j = 384; j < 1000; j++) {
                for (int k = 576; k < 1000; k++) {
                    if (i * 2 == j && i * 3 == k) {
                        String t = String.valueOf(i) + j + k;
                        boolean isgood = true;
                        Hashtable<Character, Integer> map = new Hashtable<>();
                        for (int l = 0; l < t.length(); l++) {
                            if (map.containsKey(t.charAt(l))) isgood = false;
                            else map.put(t.charAt(l), 1);
                        }
                        if (map.containsKey('0')) isgood = false;
                        if (flag && isgood) System.out.println();
                        if (isgood) {
                            System.out.printf("%d %d %d", i, j, k);
                            if (!flag) flag = true;
                            break;
                        }
                    }
                }
            }
        }
    }
}

添加新评论