题目大意:模拟比较的过程。
解题思路:递归。详细的解释在代码里面。
#include<stdio.h>
#include<string.h>
const int N = 10;
int m, n;
//打印空格
void printf_nul(int n){
for(int i = 1; i <= n; i++)
printf(" ");
}
//模拟排序 A[]存放原来的数组,S[]用来存放排序的数组,排序之前S[]得要复制A的数组。
//输出if 和else if 和else ,可以看出被排列的数,如果是排在最后的位置就输出if ,如果不是的话就输出else if 或是 else
//else if 和 else 的话就看这个数所排的位置是否是第一个,是的话就输出else,否则 if else。
void m_sort(int cur, char * A){ //cur 待排的字母,a是0,b是1.。
int i, j, k;
char s[N];
for(i = cur; i >= 0; i--){
for(k = 0; k < cur; k++)
s[k] = A[k];
if(i == cur){
printf_nul(cur);
s[i] = cur + 'a';
if(i - 1 >= 0)
printf("if %c < %c then\n", s[i - 1], s[i]);
else
printf("\n");
}
else {
for(j = cur - 1; j >= i; j--)
s[j + 1] = s[j];
s[i] = cur + 'a';
printf_nul(cur);
printf("else");
if(i - 1 >= 0)
printf(" if %c < %c then\n", s[i - 1], s[i]);
else
printf("\n");
}
if(cur + 1 == n){
printf_nul(cur + 1);
printf("writeln(%c", s[0]);
for(k = 1; k < n; k++)
printf(",%c", s[k]);
printf(")\n");
}
else
m_sort(cur + 1, s);
}
}
int main() {
scanf("%d", &m);
while(m--){
scanf("%d", &n);
char A[N];
printf("program sort(input,output);\nvar\n");
printf("a");
int i;
for(i = 1; i < n; i++)
printf(",%c", i + 'a');
printf(" : integer;\nbegin\n");
printf(" readln(a");
for(i = 1; i < n; i++)
printf(",%c", i + 'a');
printf(");\n");
m_sort(0, A);
printf("end.\n");
if(m)
printf("\n");
}
return 0;
}