题目连接:点击打开链接
这种题就是考察你是否有思路,以及你思路的正确性。
一开始,我以为就是一个栈和队列的应用,但是,思路是错的。很是不爽,现在不是思路有没有的问题了,而是思路对不对的问题。
正确的思路和自己想的思路还是有很近的相似度的。所以,对于的自己的思路不应该全盘的否定,而应该更加的深入思考改正。
人生也莫过于此,对于自己做错的事,要深入的思考,改正。
真确的思路:
首先,最小的非零数肯定在第一位才能保证其最小(多个的最小数要考虑)。
其次,位于最小数下面的牌应该放到最右边,位于最小数上面的牌放在最左边还是最右边取决与它与当前首位的大小。
正确的思路是最重要的吧。
代码:
#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; }