排序与查找总结

文章介绍了一个C++程序,该程序接收一个字符串,对其进行排序,然后找到第一个非零字符的位置,将首位与该位置的字符交换,以确保结果仍是一个有效的数字。程序使用了sort()函数进行排序,并比较了while和for循环在特定情况下的应用。
摘要由CSDN通过智能技术生成

这是最后一片排序文章,上篇题解如下:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    string s;
    cin>>s;
    sort(s.begin(),s.end());
    reverse(s.begin(),s.end());
    cout<<"Max:"<<s<<endl;
    reverse(s.begin(),s.end());
    int c=0;
    while(s[c]=='0')
    {
        c++;
    }
    swap(s[0],s[c]);
    cout<<"Min:"<<s<<endl;
    return 0;
}

如上:首先先输入字符串S,从小到大排序,从大到小排序(也就是反转字符串s)

但如果给了0 0 5 4 9这几个数字排序后变为00459,不是一个五位数

所以用while循环找到非零数,所以如果用for循环找到后就可以直接break

但为了确保正确,尽量用while循环

所以for循环的方法如下:

for(int i=0;i<a.size();i++)
{
    if(a[i]!=0)
    {
        c++;
        break;
    }
}

c++应该改为c=i;

因为我们已经排序好了,所以找到的一定是最小的

最后交换一下顺序 swap(s[0],s[c])

练习如下:

https://www.topscoding.com/p/2497icon-default.png?t=N5K3https://www.topscoding.com/p/2497https://www.topscoding.com/p/3648icon-default.png?t=N5K3https://www.topscoding.com/p/3648其实这是一种基础算法,与贪心,博弈论,递归等一样

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值