就是在写代码的时候,遇到了一些问题,有谁能帮忙改下
题目描述
克拉拉同学平时就喜欢一些奇奇怪怪的东西,她有一个神奇的口袋,她能从口袋里拿出各种神奇的东西。
某一天她发现口袋里出现了一些像数字形状的物品, 我们用 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;
}