ahxoss 2023-09-03 14:59 采纳率: 55.6%
浏览 19

c++2021年真题【口袋】

就是在写代码的时候,遇到了一些问题,有谁能帮忙改下
题目描述
克拉拉同学平时就喜欢一些奇奇怪怪的东西,她有一个神奇的口袋,她能从口袋里拿出各种神奇的东西。

某一天她发现口袋里出现了一些像数字形状的物品, 我们用 0 到 9 这十种数字来表示不同的物品。

克拉拉有一个非常喜欢的数字 x
, 现在她想用口袋里的给出的这些数字形状的物品来组成尽可能多的 x
,每个物品只能用一次。

组装过程中克拉拉发现这些像数字形状的物品中,“2” 和 “5”倒过来特别像,“6” 和 “9” 倒过来也特别像,所以她可以用 2 和 5 互相代替,也能用 6 和 9互相代替(其他的不能代替)。

举个例子,克拉拉喜欢数字 42,现在口袋里能拿出来顺序为 “23454” 这五种物品,因此她可以用第一个物品 “2” 和第三个物品 “4” 组成 42(可以组成 24,但不是需要的),还能用第四个物品 “5” 和第五个物品 “4" 组成 42(其中 5 倒过来可以当作 2 )。

现在想要知道这些物品最多能组成几个克拉拉最喜欢的数字。

请你编程帮克拉拉解决这个问题,并输出能用物品组成 x
的最多的个数。

输入描述
第一行为一个正整数 x
,表示克拉拉最喜欢的数字。

第二行为一个字符串,字符串每一位为‘0’ 到‘9’ 的某个字符,字符串长度为物品的个数(数字之间没有其他符号)。

输出描述
一行,一个整数,表示能用物品拼成最多的 x
的个数(拼成 x
的次数)。

样例
输入 复制
42
23454
输出 复制
2
输入 复制
169
21891919
输出 复制
1
输入 复制
801
12345678111
输出 复制
0

然后我的的代码是这样的

#include <bits/stdc++.h>
using namespace std;
int main(){
    string num;
    map <char, int> m;
    getline(cin, num);
    for(int i=0; i<num.size(); i++){
        if(num[i]=='5') num[i]='2';
        else if(num[i]=='2') num[i]='5';
        else if(num[i]=='6') num[i]='9';
        else if(num[i]=='9') num[i]='6';
        m[num[i]]++;
    }
    int ans=0;
    while(1){
        if(m['0']) m['0']--, ans++;
        else if(m['1']) m['1']--, ans++;
        else if(m['2']>=2) m['2']-=2, ans++;
        else if(m['3']) m['3']--, ans++;
        else if(m['4']) m['4']--, ans++;
        else if(m['5']>=2) m['5']-=2, ans++;
        else if(m['6']>=2) m['6']-=2, ans++;
        else if(m['7']) m['7']--, ans++;
        else if(m['8']) m['8']--, ans++;
        else if(m['9']>=2) m['9']-=2, ans++;
        else break;
    }
    cout<<ans<<endl;
    return 0;
}

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2023-09-03 16:15
    关注

    引用 皆我百晓生 小程序回复内容作答:

    你的代码基本上是正确的,但有一点需要修改。

    在输入时,你使用了getline(cin, num)来获取字符串,这样会导致将第一行的整数作为字符串读入,而不是将其作为数字保存在num变量中。你应该改为使用cin >> num来获取整数。

    修改后的代码如下:

    #include <bits/stdc++.h>
    using namespace std;
    int main() {
        int num;
        map<char, int> m;
        cin >> num;
        string items;
        cin >> items;
        for (int i = 0; i < items.size(); i++) {
            if (items[i] == '5')
                items[i] = '2';
            else if (items[i] == '2')
                items[i] = '5';
            else if (items[i] == '6')
                items[i] = '9';
            else if (items[i] == '9')
                items[i] = '6';
            m[items[i]]++;
        }
        int ans = 0;
        while (true) {
            if (m['0'])
                m['0']--, ans++;
            else if (m['1'])
                m['1']--, ans++;
            else if (m['2'] >= 2)
                m['2'] -= 2, ans++;
            else if (m['3'])
                m['3']--, ans++;
            else if (m['4'])
                m['4']--, ans++;
            else if (m['5'] >= 2)
                m['5'] -= 2, ans++;
            else if (m['6'] >= 2)
                m['6'] -= 2, ans++;
            else if (m['7'])
                m['7']--, ans++;
            else if (m['8'])
                m['8']--, ans++;
            else if (m['9'] >= 2)
                m['9'] -= 2, ans++;
            else
                break;
        }
        cout << ans << endl;
        return 0;
    }
    

    希望对你有帮助!

    评论

报告相同问题?

问题事件

  • 创建了问题 9月3日

悬赏问题

  • ¥15 远程访问linux主机超时
  • ¥15 odoo17存货管理优势于中国国内该行业传统ERP或MES的详细解读和举例
  • ¥15 CPU卡指令整合指令数据都在图片上
  • ¥15 火车票关联12306问题
  • ¥15 odoo17处理受托加工产品
  • ¥15 如何用MATLAB编码图三的积分
  • ¥15 圆孔衍射光强随孔径变化
  • ¥15 MacBook pro m3max上用vscode运行c语言没有反应
  • ¥15 ESP-PROG配置错误,ALL ONES
  • ¥15 结构功能耦合指标计算