题解 | #小红的数字删除#

小红的数字删除

https://www.nowcoder.com/practice/46a73f7cb2ab4a56bdb372b282b23c1e

#include <iostream>
#include <map>
#include <vector>
using namespace std;

int main() {
    int n;
    cin >> n;
    for (int i = 0; i < n; ++i) {
        string str;
        cin >> str;
        int sum = 0;
        map<int, int> mp;
        for (char ch : str) {
            sum = sum + ch - '0';
            if (mp.count(ch - '0')) {
                mp[ch - '0'] = mp[ch - '0'] + 1;
            } else {
                mp[ch - '0'] = 1;
            }
        }
        if (sum < 3) {
            cout << 0 << endl;
            continue;
        }
        int ans = 0;
        int flag = 0;
        if (sum % 3 != 0) {
            for (int i = 1; i < 9; ++i) {
                // 有一个数,删除后大于等于3, 是3的倍数
                if (mp[i] > 0 && sum - i >= 3 && (sum - i) % 3 == 0) {
                    // 这个数只有一个,且在首位, 且第二位是0,暂时跳过
                    if (str[0] - '0' == i && mp[i] == 1 && str[1] == '0') {
                        flag = i;
                        continue;
                    }
                    mp[i]--;
                    ans++;
                    sum -= i;
                    break;
                }
            }
            if (flag) {
                mp[flag]--;
                ans++;
                sum -= flag;
                for (int i = 1; i < str.size(); ++i) {
                    if (str[i] != '0') {
                        break;
                    }
                    mp[0]--;
                }
            }
            // 没有数可以删除
            if (ans == 0) {
                cout << 0 << endl;
                continue;
            }
        }

        // 所有的0都可以
        ans += mp[0];
        // 1、先删除所有的3的倍数
        ans = ans + mp[3] + mp[6] + mp[9];
        // 2、计算一下,去除所有三的倍数后,剩下的数是否可以组成3的倍数。
        // 否则就留一个不删除
        if (sum - mp[3] * 3 - mp[6] * 6 - mp[9] * 9 < 3) {
            ans--;
        }
        cout << ans << endl;
    }

}
// 64 位输出请用 printf("%lld")

前导0的情况不好处理,

全部评论

相关推荐

2024-12-09 12:21
门头沟学院 C++
l11hy:今早刚开,已满足
点赞 评论 收藏
分享
职场水母:你确定你不是在反串?另外这里是牛客,
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务