刷提報告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:洛谷的評測機器人神得很吶………這是鬧哪門子啊喂這裏寫圖片描述

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