1. 程式人生 > >【藍橋杯】分機號

【藍橋杯】分機號

題目:分機號

X老闆脾氣古怪,他們公司的電話分機號都是3位數,
老闆規定,所有號碼必須是降序排列,且不能有重複的數位。
比如:
751,520,321 都滿足要求,而,

766,918,201 就不符合要求。

現在請你計算一下,按照這樣的規定,一共有多少個可用的3位分機號碼?

請直接提交該數字,不要填寫任何多餘的內容。

參考答案:120

C++程式碼一:

#include <iostream>
using namespace std;

bool isOk(int *v) {
    // 判斷是否有重複數位 
    if(v[0] == v[1] || v[0] == v[2] || v[1] == v[2])
        return false;
    // 判斷是否是降序排列 
    if(v[0] > v[1] || v[0] > v[2] || v[1] > v[2])
        return false;
//    cout << v[2] << v[1] << v[0] << endl; 
    return true;
}

int main() {
    int i, v[3], sum = 0;
     // 最大不超過987,最小不小於210
    for(i = 987; i >= 210; i--) {
        v[0] = i%10; // 個 
        v[1] = i/10%10; // 十 
        v[2] = i/100%10; // 百
//        cout << i << "\t"; 
        if(isOk(v))
            sum++;
    }
    cout << sum;
    
    return 0;
} 

C++程式碼二:

#include <iostream>
using namespace std;

int main() {
    int a, b, c, sum = 0;
    for(a = 9; a > 1; a--) // 第1位數取值區間[2, 9]
        for(b = a - 1; b > 0; b--) // 第2位數取值區間[1, a-1]
            for(c = b - 1; c >= 0; c--) { // 第3位數取值區間[0, b-1]
//                cout << a << b << c << endl;
                sum++;
            }
    cout << sum;        
    
    return 0;
}

Java程式碼一:

public class Test {
    
    static boolean isOk(int[] v) {
        // 判斷是否有重複數位 
        if(v[0] == v[1] || v[0] == v[2] || v[1] == v[2])
            return false;
        // 判斷是否是降序排列 
        if(v[0] > v[1] || v[0] > v[2] || v[1] > v[2])
            return false;
//        System.out.println(v[2] + "" + v[1] + "" + v[0]);
        return true;
    }
    
    public static void main(String[] args) {
        int i, sum = 0;
         // 最大不超過987,最小不小於210
        for(i = 987; i >= 210; i--) {
            int[] v = new int[3];
            v[0] = i%10; // 個 
            v[1] = i/10%10; // 十 
            v[2] = i/100%10; // 百
//            System.out.println(i + "\t");
            if(isOk(v))
                sum++;
        }
        System.out.println(sum);
        return ;
    }
    
}

Java程式碼二:

public class Test {
    
    public static void main(String[] args) {
        int a, b, c, sum = 0;
        for(a = 9; a > 1; a--) // 第1位數取值區間[2, 9]
            for(b = a - 1; b > 0; b--) // 第2位數取值區間[1, a-1]
                for(c = b - 1; c >= 0; c--) { // 第3位數取值區間[0, b-1]
//                    System.out.println(a + "" + b + "" + c);
                    sum++;
                }
        System.out.println(sum);
        return ;
    }
    
}