1 条题解

  • 1
    @ 2024-12-22 11:32:24

    以下是解决这个问题的 C++ 代码:

    #include <iostream>
    using namespace std;
    
    int main() {
        int num;
        cin >> num; // 读取输入的整数
    
        // 初始化三个布尔值,用于标记是否能被3,5,7整除
        bool divisibleBy3 = (num % 3 == 0);
        bool divisibleBy5 = (num % 5 == 0);
        bool divisibleBy7 = (num % 7 == 0);
    
        // 判断是否能被3,5,7整除,并输出相应信息
        if (divisibleBy3 && divisibleBy5 && divisibleBy7) {
            cout << "3 5 7" << endl; // 能同时被3,5,7整除
        } else if (divisibleBy3 && divisibleBy5) {
            cout << "3 5" << endl; // 只能被3和5整除
        } else if (divisibleBy3 && divisibleBy7) {
            cout << "3 7" << endl; // 只能被3和7整除
        } else if (divisibleBy5 && divisibleBy7) {
            cout << "5 7" << endl; // 只能被5和7整除
        } else if (divisibleBy3) {
            cout << "3" << endl; // 只能被3整除
        } else if (divisibleBy5) {
            cout << "5" << endl; // 只能被5整除
        } else if (divisibleBy7) {
            cout << "7" << endl; // 只能被7整除
        } else {
            cout << "n" << endl; // 不能被3,5,7整除
        }
    
        return 0;
    }
    

    这段代码首先读取用户输入的整数,然后使用模运算符 % 来判断这个数是否能被3、5、7整除。根据题目要求,我们使用布尔值来标记每个除数的整除情况,然后根据这些标记输出相应的信息。如果这个数能同时被3、5、7整除,我们输出 "3 5 7";如果只能被其中两个数整除,我们按照从小到大的顺序输出这两个数;如果只能被其中一个数整除,我们输出这个数;如果都不能整除,我们输出 "n"。 当然,我们可以简化代码,使其更加简洁。下面是一个简化版本的代码:

    #include <iostream>
    using namespace std;
    
    int main() {
        int num;
        cin >> num; // 读取输入的整数
    
        bool by3 = num % 3 == 0;
        bool by5 = num % 5 == 0;
        bool by7 = num % 7 == 0;
    
        if (by3 && by5 && by7) {
            cout << "3 5 7" << endl;
        } else if (by3 && by5) {
            cout << "3 5" << endl;
        } else if (by3 && by7) {
            cout << "3 7" << endl;
        } else if (by5 && by7) {
            cout << "5 7" << endl;
        } else if (by3) {
            cout << "3" << endl;
        } else if (by5) {
            cout << "5" << endl;
        } else if (by7) {
            cout << "7" << endl;
        } else {
            cout << "n" << endl;
        }
    
        return 0;
    }
    

    这个版本的代码与之前的逻辑相同,但去掉了一些不必要的注释和变量声明,使其看起来更加简洁。然而,这个代码的逻辑分支较多,我们可以通过枚举所有可能的情况来进一步简化:

    #include <iostream>
    using namespace std;
    
    int main() {
        int num;
        cin >> num; // 读取输入的整数
    
        int count = 0;
        if (num % 3 == 0) count++;
        if (num % 5 == 0) count += 2;
        if (num % 7 == 0) count += 4;
    
        switch (count) {
            case 7: cout << "3 5 7" << endl; break;
            case 3: cout << "3 7" << endl; break;
            case 5: cout << "5 7" << endl; break;
            case 6: cout << "3 5" << endl; break;
            case 1: case 2: case 4:
                switch (count) {
                    case 1: cout << "3" << endl; break;
                    case 2: cout << "5" << endl; break;
                    case 4: cout << "7" << endl; break;
                }
                break;
            default: cout << "n" << endl; break;
        }
    
        return 0;
    }
    

    在这个版本中,我们使用了一个整数 count 来记录 num 能被哪些数整除。然后,我们使用 switch 语句来简化多个 if-else 语句。这种方法减少了代码的复杂性,使其更加简洁。

    信息

    ID
    622
    时间
    1000ms
    内存
    128MiB
    难度
    6
    标签
    (无)
    递交数
    44
    已通过
    15
    上传者