問題の意味は:数とアレイ10の長さは、9 1〜9の数に配列を入力します。
各桁の数は、配列の代表であるアドレスアドレスは数字の対応する番号よりも大きい場合、いくつかの連続した非ヌルサブストリングの期間を取り、ビットを交換、それが最大数を作ることが可能となります。
アイデア:低交換よりも良好でなければならないので、大きな付加価値の高い代替の、見つけるために、左から右へ。
する#include <stdio.hに> する#include <math.h>の 書式#include < 文字列・H> int型のmain() { int型 N、F [ 10 ]、I、S [ 200010 ]、D、フラグ。 チャー [ 200010 ]。 一方、(〜のscanf(" %d個"、&N)) { scanf関数(" %S "、&A )。 用(i = 0 ; iがn <I ++は) S [i]は - [I] = ' 0 'を、 以下のための(I =1 ; iが= < 9 ; iが++ ) のscanf(" %dの"、&F [I])。 用(i = 0、フラグ= 0 ; iがn <; iは++ ) { dは =のS [i]は、 もし(F [D]> S [I]) { S [I] = F [D]。 フラグ = 1 。 } そう であれば([D] <F {S [i])と する場合(フラグ== 1 ) ブレーク。 } } のための(i = 0 ; iがn <; iは++ ) のprintf(" %dの" 、S [I])。 printf(" \ nを" ); } }