藍橋杯 填空題_6

給定一個字符串,其含有的字符各不相同。程序輸出該字符串的所有排列(全排列)情形。例如:給定字符串“xyz”,則程序輸出:

xyz

xzy

yxz

yzx

zyx

zxy

試完善程序中空缺的部分。

void f(char *str, int len, int n)
{   
	int i;   
	char tmp;   
	char *p = (char *)malloc(__________);   
	if(n==len-1){   
		printf("%s\n",str);   
	}else{   
		for(i=n;i<len;i++){   
			strcpy(p,str);   

			tmp = *(str+n);   
			*(str+n) = *(str+i);   
			*(str+i) = tmp;   

			_______________;   
			strcpy(str,p);   
		}   
	}   
	free(p);   
}   

int main(int argc, char **argv)
{   
	char str[] = "xyz";   
	f(str,3,0);   
	printf("\n");   
	return 0;   
}

分析:

        第1空分配空間,由strcpy(p,str)知p指向字符串,所以1空爲len+1len個字符+1個字符串結尾符);由於第2空之前的語句實現了當前字符與下一字符位置的調換,加上循

i和變量n的存在,該空應爲遞歸,分析得該空爲f(str, len, i+1)

解:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void f(char *str, int len, int n)
{   
	int i;   
	char tmp;   
	char *p = (char *)malloc(len+1);   
	if(n==len-1){   
		printf("%s\n",str);   
	}else{   
		for(i=n;i<len;i++){   
			strcpy(p,str);   

			tmp = *(str+n);   
			*(str+n) = *(str+i);   
			*(str+i) = tmp;   

			f(str, len, n+1);   
			strcpy(str,p);   
		}   
	}   
	free(p);   
}   

int main(int argc, char **argv)
{   
	char str[] = "xyz";   
	f(str,3,0);   
	printf("\n");   
	return 0;   
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章