ZBLOG

给定一个最多不超过 100 位且不含任何前导 0 的非负整数 n 。 请你删除 n 中的一些数字(也可以不删),从而得到一个非负整数,要求最终得到的数同时满足: 至少包含 1 位数字。 不含前导 0 。 能够被 8 整除。 请你判断此问题是否有解,如果有解,输出最终得到的数。 注意,删除数字后,剩余数字的相对顺序保持不变。 输入格式 一个非负整数 n 。 输出格式 如果此问题无解,则输出一行 NO 即可。 如果此问题有解,则首先输出一行 YES,然后在第二行输出最终得...

下面是一个解决此问题的 C++ 代码示例:

#include <iostream>
#include <string>

using namespace std;

bool checkDivisibleBy8(string num) {
    int n = num.size();
    if (n == 1) {
        return stoi(num) % 8 == 0;
    } else if (n == 2) {
        int x = stoi(num);
        return x % 8 == 0 || (x % 10 == 0 && x / 10 % 8 == 0);
    }
    
    int count[10] = {0};
    for (char c : num) {
        count[c - '0']++;
    }

    for (int i = 104; i < 1000; i += 8) {
        int tempCount[10] = {0};
        tempCount[i / 100]++;
        tempCount[i / 10 % 10]++;
        tempCount[i % 10]++;
        
        bool valid = true;
        
        for (int j = 0; j < 10; j++) {
            if (tempCount[j] > count[j]) {
                valid = false;
                break;
            }
        }
        
        if (valid)
            return true;
    }
    
    return false;
}

string solve(string num) {
    int n = num.size();

    // Check if the original number is divisible by
    // the target number without deleting any digits
    if (checkDivisibleBy8(num))
        return num;

    // Iterate through all possible combinations of deleted digits
    for(int i = n-1; i >= max(0, n-3); i--) {
      string subNum = num.substr(0, i) + num.substr(i+1);

      // Check if the modified number is divisible by 8
      if (checkDivisibleBy8(subNum))
        return subNum;
    }

    return "NO";
}

int main() {
    string num;
    cin >> num;

    string result = solve(num);
    if (result != "NO") {
        cout << "YES" << endl;
        cout << result << endl;
    } else {
        cout << "NO" << endl;
    }

    return 0;
}

这段代码首先定义了一个名为 checkDivisibleBy8 的函数,用于检查一个给定的字符串表示的数字是否能被 8 整除。然后定义了一个 solve 函数,用于解决题目中的问题。

main 函数中,首先读取输入的数字 num,然后调用 solve 函数得到结果。如果结果不是 “NO”,则输出 “YES” 和最终得到的数;否则输出 “NO”。

请注意,在处理大整数时可能会遇到溢出问题,这需要额外考虑和处理。此示例代码假设输入范围在有效限制内,并且没有进行溢出检查。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=8364

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?