刷提报告002 洛谷P1008

今天A了一道很水很水的题目,不过还是在阴沟里翻了一波船……这个在后面写吧……总之发现特值判定很重要。还是要好好学习一个。

洛谷P1008 三连击

题目背景
本题为提交答案题,您可以写程序或手算在本机上算出答案后,直接提交答案文本,也可提交答案生成程序。
题目描述
将1,2,…,9共9个数分成三组,分别组成三个三位数,且使这三个三位数构成1:2:3的比例,试求出所有满足条件的三个三位数。
输入输出格式
输入格式:

木有输入

输出格式:

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

输入输出样例:

输入样例#1:

(null)

输出样例#1:

192 384 576
***

***
(输出被和谐了)

好,现在通过对题目的分析易得,三位数最小为123,最大为329,其实333也无所谓,因为最多做210次,只要函数写得不是很坑就好。
大致思路如下:对任意n,把n、2n、3n每一位存入数组,冒泡排序,自前向后比较寻找重复元素,如果没有就输出。
于是很容易得到结果。但是由于我审题的锅导致WA了两次0.0关键是我神他喵重新提交文本,一个字都没改!这是不行的……
因为这里有一点需要注意。
那就是题目中讲了是1-9,九个数字,没有0……
那就把0在判断的时候排除,AC。
好气哦……

#include <iostream>
#define MAX 20
using namespace std;
int bit[9];
bool judge(int i) {
    bool result = true;
    bit[0] = i / 100;
    bit[1] = i % 100 / 10;
    bit[2] = i % 10;
    for (int k = 0; k < 3; k++) {
        bit[3*k] = i*(k + 1) / 100;
        bit[3*k + 1] = i*(k + 1) % 100 / 10;
        bit[3*k + 2] = i*(k + 1) % 10;
    }
    for (int a = 0; a < 9; a++) {
        for (int b = 0; b < 8; b++) {
            if (bit[b] > bit[b + 1]) {
                int temp = bit[b];
                bit[b] = bit[b + 1];
                bit[b + 1] = temp;
            }
        }
    }
    for (int a = 0; a < 8; a++) {
        if (bit[a] == 0)
            result = false;
        else
            result = result && (bit[a] != bit[a + 1]);
    }
    return result;
}
int main(void) {
    for (int i = 123; i < 333; i++) {
        if (judge(i))
            cout << i <<" "<< i * 2 <<" "<< i * 3 << endl;
    }
    return 0;
}

ps:洛谷的评测机器人神得很呐………这是闹哪门子啊喂这里写图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章