110 - Meta-Loopless Sorts(递归)

题目:110 - Meta-Loopless Sorts


题目大意:模拟比较的过程。


解题思路:递归。详细的解释在代码里面。


#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;

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值