切换到宽版
  • 5200阅读
  • 3回复

新手求助,解决问题 [复制链接]

上一主题 下一主题
离线gdczf
 
只看楼主 倒序阅读 0 发表于: 2007-04-13
题一:字母组合:现在一串不超过6个字母的小写英文字母,显示出串当中出现过的所有字母组成的集合.
题二:从键盘输入一个20位以内的自然数,然后将组成这个数的各位数字重新排列,得到一个数值为最小的新数,且新数的位数保持不变。
这是关于集合的习题,不知道哪位高手能帮一下忙我这个菜鸟。
离线justsoso
只看该作者 1 发表于: 2007-04-15
题一
  1. PROGRAM Set1;
  2. Type
  3.   stack=record
  4.     s:array[0..20] of char;
  5.     base,top:integer;
  6.   end;
  7. Var s:string;
  8.   n:byte;
  9.   stk:stack;
  10. Procedure initstack(var st:stack);
  11. begin
  12.   st.base:=0;
  13.   st.top:=0;
  14. end;
  15. Procedure Push(var st:stack;e:char);
  16. begin
  17.   st.top:=st.top+1;
  18.   st.s[st.top]:=e;
  19. end;
  20. Procedure Pop(var st:stack);
  21. begin
  22.   st.top:=st.top-1;
  23. end;
  24. Procedure Print(st:stack);
  25. var i:byte;
  26. begin
  27.   for i:=1 to st.top do write(st.s[i]);
  28.   writeln;
  29. end;
  30. Procedure allset(i:integer);
  31. var b:byte;
  32. begin
  33.   if i<=n then
  34.     begin
  35.     for b:=0 to 1 do
  36.       if b=1 then
  37.         begin
  38.         push(stk,s[i]);
  39.         allset(i+1);
  40.         pop(stk);
  41.         end
  42.       else
  43.         allset(i+1);
  44.     end
  45.   else Print(stk);
  46. end;
  47. Begin
  48. readln(s);
  49. n:=length(s);
  50. allset(1);
  51. readln;
  52. End.
离线justsoso
只看该作者 2 发表于: 2007-04-15
题二就是从高位到低位的数字,从小到大撒
离线gdczf
只看该作者 3 发表于: 2007-04-16
谢谢了
快速回复
限100 字节
 
上一个 下一个