问题标题: 酷町堂:3965 70分!!!

0
0
已解决
黄依成
黄依成
中级天翼
中级天翼
#include<iostream>
#include<string>
using namespace std;
int main(){
    string s;
    cin>>s;
    for(int i=0;i<s.size()-1;i++){
        for(int j=0;j<s.size()-i-1;j++){
            if(s[j]>s[j+1]){
                swap(s[j],s[j+1]);
            }
        }
    }
    if(s[0]==0){
        for(int i=1;i<s.size();i++){
            cout<<s[i];
        }
    }
    else{
        for(int i=0;i<s.size();i++){
            cout<<s[i];
        } 
    }
    return 0;
}

70分!!!


2
已采纳
王子健
王子健
初级天翼
初级天翼

你的答题思路是莫有问题滴,但是你忽略了一个重点,也是一个难点:

题目最后说了

虽然你注意到了,并且也判断了,但没有对。

是因为你的判断不应该是下面这段:

你不能只判断第一位,如果第一位删除依旧是0呢?

如这个样例:40000

那么就算你判断了,也只是第一位,最后的结果是:

0004

你依旧没有把0都删除

 

 

那么解决办法是什么?我来跟你说我的思路:

因为你不知道要删除几次0,所以你要使用while循环删除,每次删除一个,直到这个字符不为0,这个条件就是在while循环里判断的

如:int t = 0;

while (s[t] != '0')

这样一个个判断,判断到这一位不是0就可以了。

注意 : 如果这个数本身就是0,就需要特判:

if (s.size() == 1 && s == '0')

    cout << '0';

如果改过这两点就可以AC了

望采纳,谢谢!!!

0
王子健
王子健
初级天翼
初级天翼

@黄依成  你评论我什么,我看不见,你发在回答里面

0
黄依成
黄依成
中级天翼
中级天翼

听君一言茅塞顿开

AC啦!

我要回答