切换到宽版
  • 6868阅读
  • 6回复

求助:2005联赛初赛读程题第4题详解。谢谢阿!帮帮忙阿! [复制链接]

上一主题 下一主题
离线wy19818
 
只看楼主 倒序阅读 0 发表于: 2006-10-08
var
    str : string;
    len,i,j : integer;
    nchr : array[0..25] of integer;
    mmin : char;
  begin
    mmin := 'z';
    readln(str); len := length(str);
    i := len;
    while i>= 2 do begin
      if str[i - 1] < str[i] then break; dec(i);
    end;
    if i = 1 then begin
      writeln('No result!'); exit;
    end;
    for j := 1 to i - 2 do write (str[j] < mmin) then
    fillchar(nchr,sizeof(nchr),0);
    for j := i to len do begin
      if (str[j] > str[i - 1]) and (str[j] < mmin) then
          mmin := str[j];
      inc(nchr[ord(str[j]) - ord('a')]);
    end;
    dec(nchr[ord(mmin) - ord('a')]);
    inc(nchr[ord(str[i - 1]) - ord('a')]);
    write(mmin);
    for i := 0 to 25 do
      for j := 1 to nchr[i] do
          write(chr(i + ord('a')));
    writeln;
  end.
输入:zzyzcccbbbaaa
输出:_____
答案是: zzzaaabbbcccy
我是初学者,拜托高手讲详细点好吗?
非常感谢!
离线ld科
只看该作者 1 发表于: 2006-10-17
w y我也不会啊
离线stevenjl

只看该作者 2 发表于: 2006-10-17
这个,我是硬算的……很简单啊,一会儿就好了
Dream Walker...
离线filippo31
只看该作者 3 发表于: 2006-10-18
好好列表,千万不要乱!
算的过程也不是很难...
最重要的是这题要现分清结构,各个begin和end 不要乱了!
离线fangdy
只看该作者 4 发表于: 2006-10-18
先声明我也不太懂,只是把我的理解写一遍,我们互相讨教吧。我对这题也有很多疑问。
var
  str : string;
  len,i,j : integer;
  nchr : array[0..25] of integer;
  mmin : char;
begin
  mmin := 'z';
  readln(str); len := length(str);——这里我得到len的长度应该是13吧
  i := len;
  while i>= 2 do begin
    if str[i - 1] < str[i] then break; dec(i);这里就有疑问了,数组不是0——25吗?
                    那应该从a[0]开始放字符吧(不太懂)
                    那a[13]就不是空的吗/。我开始乱做了,得到 i=3
  end;
  if i = 1 then begin
    writeln('No result!'); exit;
  end;
  for j := 1 to i - 2 do write (str[j] < mmin) then——这里程序错了吧应写为write(str[j]);
  fillchar(nchr,sizeof(nchr),0);
  for j := i to len do begin
    if (str[j] > str[i - 1]) and (str[j] < mmin) then
      mmin := str[j];
    inc(nchr[ord(str[j]) - ord('a')]);
  end;
  dec(nchr[ord(mmin) - ord('a')]);
  inc(nchr[ord(str[i - 1]) - ord('a')]);
  write(mmin);
  for i := 0 to 25 do
    for j := 1 to nchr[i] do
      write(chr(i + ord('a')));
  writeln;
end.
输入:zzyzcccbbbaaa 输出:____ 后面请高手继续,呵呵我都快把pascal忘记了 我写的字怎么这么模糊啊?
离线stevenjl

只看该作者 5 发表于: 2006-10-19
首先把正确程序发一遍:
var
str : string;
len, i, j : integer;
nchr : array [0..25] of integer;
mmin : char;
begin
mmin := 'z';
readln(str);
len := length(str);
i := len;
while i >= 2 do begin
if str[i - 1] < str[i] then break;字符串是从1开始放字符的
dec(i);
end;
if i = 1 then begin
writeln('No result!');
exit;
end;
for j := 1 to i - 2 do write(str[j]);
fillchar(nchr, sizeof(nchr), 0);
for j := i to len do begin
if (str[j] > str[i - 1]) and (str[j] < mmin) then
mmin := str[j];
inc(nchr[ord(str[j]) - ord('a')]);
end;
dec(nchr[ord(mmin) - ord('a')]);
inc(nchr[ord(str[i - 1]) - ord('a')]);
write(mmin);
for i := 0 to 25 do
for j := 1 to nchr[i] do
write(chr(i + ord('a')));
writeln;
end.

诶呀呀,也没有什么好讲的……就是强算
Dream Walker...
离线流星揽月
只看该作者 6 发表于: 2006-10-19
脑子好用就算得快哟~~~~~~~~~~~~~~~~~~~~~
快速回复
限100 字节
 
上一个 下一个