返回信息流不知道这次又会是什么bug 哎。。我想不出来了,麻烦大神帮忙了
这个我写的可能有点混乱,我尽量加了注释。。。麻烦大家了
以下是题目
描述
Polycarp特别喜欢数字被10^k整除。
在给定数量的n Polycarp想要删除最少数量的数字以获得可被10^k整除的数字。例如,如果k=3,在数字30020中,足以删除单个数字(2)。在这种情况下,结果为3000,可由10^3=1000整除。
编写一个程序,打印给定整数n删除的最小位数,以便结果可被10^k整除。
输入
输入的唯一行包含两个整数n和k(0≤n≤2 000 000 000,1≤k≤9 )。
它保证答案存在。输入中的所有数字都用传统的整数表示法表示,即没有任何额外的前导零。
输出
输出要删除的所需最小位数。从数字n中删除适当的w个数字后,结果应具有可被10^k整除的值。
样例输入1
30020 3
样例输出1
1
样例输入2
100 9
样例输出2
2
样例输入3
10203049 2
样例输出3
3
提示
在示例2中,可以删除两个数字:1和任何0.结果是数字0,它可以被任何数字整除。
以下是我的代码
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
string s; int n; int a[10];
memset(a,0,sizeof(a));
cin>>s>>n;//s是要处理的数 n是题目中的k
int l=s.length();
for(int i=0;i<l;++i) a[i]=s[l-1-i]-48;//把字符串转换为数字存入a
int y=0,o=0;int j=0;//y用来记非0数的个数,字母o用来记0的个数;
while(o<n&&j<l)
{
if(a[j]==0)
o++;
else
{y++;a[j]=0;}
j+=1;
}
int bol=0;//以下用于判断会不会出现样例2的情况
for(int i=0;i<l;++i)
if(a[i]!=0)
bol=1;
if(bol)
cout<<y;
else
cout<<l-1;//如果是类似样例2的情况,输出字符串长度-1,即在字符串中只留下一个0,其余删去
return 0;
}
这个代码题目给的数据都没有问题,自己也试了一些,就是Wrong Answer 心累心累。。求指点,谢谢大家
这是一条镜像帖。来源:北邮人论坛 / acm-icpc / #94145同步于 2017/10/14
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ACM_ICPC机器人发帖
【问题】一道水题的求助
TTTAO1015
2017/10/14镜像同步15 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
感觉上面代码有点不清晰 我又写了一个版本 仍然WA[em23]
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
string s;int k;
cin>>s>>k;
int ls=s.length();
int a[10];
memset(a,0,sizeof(a));
for(int i=0;i<ls;++i) a[i]=s[ls-1-i]-48;
int c0=0;
for(int i=0;i<ls;++i)
if(a[i]==0)
c0+=1;
if(c0<k)
cout<<ls-1<<endl;
else
{
int y=0,o=0;int j=0;
while(o <k)
{
if(a[j]==0)
o++;
else
y++;
j+=1;
}
cout<<y<<endl;
}
return 0;
}
贪心的从后边网前边找。 你可以用我的程序对拍
```
#include <bits/stdc++.h>
using namespace std;
int main() {
string s;
int k, n;
cin >> s >> k;
n = s.size();
int ans = 0;
int cnt = 0;
for (int i = n - 1; i >= 0; --i) {
if (s[i] == '0') {
cnt++;
if (cnt == k) break;
} else {
ans++;
}
}
if (cnt < k) ans += (cnt - 1);
cout << ans << endl;
return 0;
}
```
谢谢了先给大佬磕头[ema33]
【 在 Slmalone 的大作中提到: 】
: 贪心的从后边网前边找。 你可以用我的程序对拍
: ```
: #include <bits/stdc++.h>