【藍橋杯】分機號
阿新 • • 發佈:2019-01-30
題目:分機號
X老闆脾氣古怪,他們公司的電話分機號都是3位數,
老闆規定,所有號碼必須是降序排列,且不能有重複的數位。
比如:
751,520,321 都滿足要求,而,
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 ;
}
}