题目:分机号
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 ;
}
}