数字不是0-9的整形,是1-15的整形,如果将重复多到少排序,然后大到小排序。15,15,15,10,10,5,3,2,1

denglei_hrb8 2009-12-22 11:53:45
数字不是0-9的整形,是1-15的整形,如果将重复多到少排序,然后大到小排序。15,15,15,10,10,5,3,2,1
...全文
109 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
denglei_hrb8 2009-12-23
  • 打赏
  • 举报
回复
将一维数组20个元素值,由重复多到少,大到小进行排序。请给出算法。
wliaoc 2009-12-23
  • 打赏
  • 举报
回复
规则不合理
chhrsas 2009-12-22
  • 打赏
  • 举报
回复
你这个规则自己先想清楚。
比如 112是算 1,12 还是算11,2? 这些要考虑进去的。
bdmh 2009-12-22
  • 打赏
  • 举报
回复
看不懂
denglei_hrb8 2009-12-22
  • 打赏
  • 举报
回复
10,10,10,15,15,5,3,2,1
阿三 2009-12-22
  • 打赏
  • 举报
回复
看不懂规则。

1,5,10,15,10,5,12,3,15这样也符合呀。
denglei_hrb8 2009-12-22
  • 打赏
  • 举报
回复
原始数据是:15101510512315 要得到的结果是:15,15,15,10,10,5,3,2,1,有分隔符“,”。
denglei_hrb8 2009-12-22
  • 打赏
  • 举报
回复
原始数据无分隔符,要得到的结果有分割符。帮助下
chhrsas 2009-12-22
  • 打赏
  • 举报
回复
楼主关于此问题的前一贴问的就是一个串('99858885599913'),没有分隔符,所以这一贴我的思维就惯性了下。
haitao 2009-12-22
  • 打赏
  • 举报
回复
再分割排序

原始数据有没有分隔符?
chhrsas 2009-12-22
  • 打赏
  • 举报
回复
把原来的方法改了下,有点笨重,楼主将就着看吧。
function TForm1.OrderByMultiRules(s: string): string;
var
i, k, m, tsCount: Integer;
ts: TStringList;
tmp: string;
begin
ts := TStringList.Create;
try
k := 0;
//先分割成数据字 如 53215151010101 先分割成 5 3 2 15 15 10 10 10 1,共9份。
ts.Add(s[1]);
for i := 2 to Length(s) do
begin
if StrToInt(ts[k] + s[i]) <= 15 then //如果当前值加前一值 小于15,则合成一份
ts[k] := ts[k] + s[i]
else //否则新增一份
begin
ts.Add(s[i]);
Inc(k);//记 ts 中元素个数
end;
end;
//再把临近相等的值合并成一份,以便用于后面的比较,合并后变成(5 3 2 1515 101010 1),共6份
tsCount := ts.Count - 1;
for i := tsCount downto 1 do
begin
if ts[Pred(i)] = tmp then //如果和前面的一个相等,则合并
begin
ts[i] := ts[i] + ts[Pred(i)];
ts.Delete(Pred(i)); //合并删除被合并的单元
end
else
tmp := ts[Pred(i)];//记录相等的值
end;
//改进后的冒泡排序
m := ts.Count - 1;
while m > 0 do
begin
k := 0;
for i := 0 to m - 1 do
if StrToInt(ts[i]) < StrToInt(ts[Succ(i)]) then
begin
tmp := ts[i];
ts[i] := ts[Succ(i)];
ts[Succ(i)] := tmp;
k := i; //记录本次换位发生的位置
end;
m := k; //本循环后发生交换的位置
end;
//输出
for i := 0 to ts.Count - 1 do
Result := Result + ts[i];
finally
FreeAndNil(ts);
end;
end;

procedure TForm1.btn1Click(Sender: TObject);
begin
//ShowMessage(OrderByMultiRules('99858885599913'));
ShowMessage(OrderByMultiRules('53215151010101'));
end;
wliaoc 2009-12-22
  • 打赏
  • 举报
回复
1、弄一个数组,长度15,数组第一个数据统计重复的1的个数,第二个统计重复的2的个数,依次类推,第15个统计重复的15个数;
2、冒泡排序从高到低找出数组中的大数,大数就是重复次数,数组下标就是重复数字,用字符串将找到的数字表示出来,如S[11]=8;8在数组中最大,那字符串就是“11,11,11,11,11,11,11,11”,后面找到的加到字符串后边
goldqq 2009-12-22
  • 打赏
  • 举报
回复
看不懂,,,,帮顶一下。。。。
stgsd 2009-12-22
  • 打赏
  • 举报
回复
用十六進制數

16,742

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧