【蓝桥杯】分机号

题目:分机号

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 ;
    }
    
}
  • 11
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Homilier

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值