nyoj&&hdu 卡片游戏

本文探讨了一道算法题的解决思路,强调了正确的算法设计的重要性。文章分享了一个关于如何构造由一系列数字卡片组成的最小数值的方法,通过合理的排序和放置策略来确保最终组合成的数字尽可能小,并附带了实现这一目标的C++代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目连接:点击打开链接

这种题就是考察你是否有思路,以及你思路的正确性。

一开始,我以为就是一个栈和队列的应用,但是,思路是错的。很是不爽,现在不是思路有没有的问题了,而是思路对不对的问题。

正确的思路和自己想的思路还是有很近的相似度的。所以,对于的自己的思路不应该全盘的否定,而应该更加的深入思考改正。

人生也莫过于此,对于自己做错的事,要深入的思考,改正。

真确的思路:

首先,最小的非零数肯定在第一位才能保证其最小(多个的最小数要考虑)。

其次,位于最小数下面的牌应该放到最右边,位于最小数上面的牌放在最左边还是最右边取决与它与当前首位的大小。

正确的思路是最重要的吧。

代码:

#include<iostream>
#include<cstring>
#include<string>

using namespace std;
const int N=105;

int main()
{
    int T;
    cin>>T;
    while(T--)
    {
        char min='9';
        int len,p=0;
        string a,s;
        cin>>a;
        len=a.size();
        for(int i=0;i<len;i++)
        if(min>=a[i]&&a[i]!='0') min=a[p=i];
        s=a[0];
        for(int i=1;i<len;i++)
        {
            if(i==p) s=a[i]+s;
            else if(i>p) s=s+a[i];
            else if(i<p&&a[i]<=s[0]) s=a[i]+s;
            else s=s+a[i];
        }
        cout<<s<<endl;
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值