如何将179207838三排列成887793210(100)

  • 主题发起人 主题发起人 leizi1128
  • 开始时间 开始时间
L

leizi1128

Unregistered / Unconfirmed
GUEST, unregistred user!
如何将179207838三排列成887793210,最好有封装好的方法。
 
function GetSortValue(AValue: Integer): Integer;var sl: TStringList
sValue,stmp: string
I: Integer;begin sl := TStringList.Create
sValue := IntToStr(AValue)
sTmp := ''
for I := 1 to Length(sValue) do begin sTmp := sTmp + sValue + #13#10
end
sl.Text := sTmp
sl.Sorted := True
sValue := ''
for I := sl.Count downto 0 do begin sValue := sValue + sl.Strings
end
sl.Free
Result := StrToInt(sValue);end;没有调试,现写的。
 
上面调试的结果是988773210,不是887793210,能不能在帮忙看一下
 
重复次数最多的排前,大的排前。
 
你给的是字串还是数字?
 
implementationuses StrUtils;{$R *.dfm}{$DEFINE Debug}type PPilv= ^Pilv
Pilv=record chr: Char
times: Integer
idx: Integer; //not used end;var pArray: array[0..9] of PPilv
iArray: array[0..9] of Pilv;procedure BubbleSort;var i, j: Integer
ptmp: PPilv;begin for i := 0 to 9 do begin pArray:= @iArray
end
for i := 0 to 9 do begin for j := i to 9 do begin if( pArray^.times> pArray[j]^.times) then begin ptmp:= pArray
pArray:= pArray[j]
pArray[j]:= ptmp
end
end
end
for i := 0 to 9 do begin for j := i to 9 do begin if((pArray^.times= pArray[j].times)and(pArray.chr> pArray[j].chr)) then begin ptmp:= pArray
pArray:= pArray[j]
pArray[j]:= ptmp
end
end
end;end;procedure PrintStr;var i, j: Integer
str: string;begin for i := 0 to 9 do begin for j := 1 to pArray.times do begin str:= str+ pArray.chr
end
end
ShowMessage(ReverseString(str));end
procedure Clear;var i: Integer
stmp: string
//for debugbegin stmp:= ''
{$IFDEF Debug} for i := 0 to 9 do begin stmp:= stmp+ ' '+ pArray.chr+ ':'+ IntToStr(pArray^.times)
end
ShowMessage(stmp)
{$ENDIF} for i := 0 to 9 do begin iArray.times:= 0
iArray.idx:= 0
end;end;procedure TForm1.btnExitClick(Sender: TObject);begin Close;end;procedure TForm1.FormCreate(Sender: TObject);var i: Integer;begin for i := 0 to 9 do begin pArray:= nil
iArray.times:= 0
iArray.idx:= 0
iArray.chr:= Char(i + $30)
end;end;procedure TForm1.btnActionClick(Sender: TObject);var str: string
i, n: Integer;begin str:= edt1.Text
for i := 0 to Length(str)-1 do begin n:= ord(str[i + 1]) - $30
Inc(iArray[n].times)
end
BubbleSort
PrintStr
Clear;end;end.定义了一个TEdit: edt1, 一个TButton: btnExit,一个TButton: btnAction。
 
二楼需要Sort完了还要再冒一次泡,才能完成按频率和次序的降序排列。
 
function GetSortValue(AValue: Integer): Integer;var sl: TStringList
sValue,stmp: string
I: Integer;begin sl := TStringList.Create
sValue := IntToStr(AValue)
sTmp := ''
for I := 1 to Length(sValue) do begin sTmp := sTmp + sValue + #13#10
end
sl.Text := sTmp
sl.Sorted := True
sValue := ''
for I := sl.Count downto 0 do begin sValue := sValue + sl.Strings
end
sl.Free
Result := StrToInt(sValue);end;这个思路完成了一半,排完肯定是988773210,不是887793210然后判断每个字符是否连续,连续多少,放到s1,在原字符串里删除重复的放到S2最后S:=S1+S2
 
后退
顶部