UVa 110 - Meta-Loopless Sorts

来源:互联网 发布:刘心武 红楼梦 知乎 编辑:程序博客网 时间:2024/05/16 12:02

題目:輸出n個數字比較大小過程的Pascal代碼。

分析:圖論,搜索。利用Knuth的生成排列算法,遞歸構造。

            觀察發現,比較的過程是Knuth的生成排列序列,所以使用生成排列算法,注意輸出格式;

說明:有點糾結杭電過不去,有非法數據,800題了╮(╯▽╰)╭。

#include <stdio.h>char save[10];void dfs(int s, int n){if (s >= n) {for (int j = 0; j < s; ++ j)printf("  ");printf("writeln(%c",save[0]);for (int i = 1; i < n; ++ i)printf(",%c",save[i]);printf(")\n");return;}int used[10];for (int i = 0; i < s; ++ i)used[i] = save[i];for (int i = s+1; i > 0; -- i) {save[i] = save[i-1];save[i-1] = s+'a';if (s > 0) {for (int j = 0; j < s; ++ j)printf("  ");if (i == s+1)printf("if %c < %c then\n",save[i-2],s+'a');else if (i == 1)printf("else\n");else printf("else if %c < %c then\n",save[i-2],save[i-1]);}dfs(s+1, n);}for (int i = 0; i < s; ++ i)save[i] = used[i];}int main(){int n, m;while (~scanf("%d",&n)) while (n --) {scanf("%d",&m);puts("program sort(input,output);");puts("var");printf("a");for (int i = 1; i < m; ++ i)printf(",%c",'a'+i);puts(" : integer;");puts("begin");printf("  readln(");printf("a");for (int i = 1; i < m; ++ i)printf(",%c",'a'+i);puts(");");dfs(0, m);puts("end.");if (n) puts("");}return 0;}


0 0
原创粉丝点击