전체 배열 재 귀 사고 (c) 버 전
2167 단어 전체 배열
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX 10
char * subElement(char *input,int pos);
void permutation(char *input,int len, int pos, char *p);
char *subElement(char *input, int pos)
{
int i = 0;
char *ret = (char*)malloc(MAX*sizeof(char));
char *tmp = ret;
while( input != NULL && i < MAX )
{
if(i != pos)
{
*tmp = *input;
tmp++;
}
input++;
i++;
}
tmp[i] = '\0';
return ret;
}
void permutation(char *input, int len, int pos, char *p)
{
int i = 0;
if(len == 0)
{
return;
}
//only one element
if(len == 1)
{
printf("{%s}
",input);
return;
}
char *lp = (char *)malloc(sizeof(char)*MAX);
memset(lp,'\0',sizeof(char)*MAX);
char *sp = subElement(input, pos);
int plen = 0;
if(p != NULL)
{
plen = strlen(p);
strcpy(lp,p);
}
lp[plen] = input[pos];
lp[plen+1] = '\0';
int slen = strlen(sp);
if(slen == 1)
{
lp[plen+1] = *sp;
printf("{%s}
",lp);
return;
}
for(i = 0; i < slen; i++)
{
permutation(sp,len-1,i,lp);
}
free(sp);
free(lp);
}
void main()
{
int i = 0;
char instr[MAX];
printf("write elements:");
scanf("%s",instr);
char *parent = NULL;
for(i = 0; i < strlen(instr); i++)
{
permutation(instr,strlen(instr), i, parent);
}
}
이런 문제 에 대한 수학 적 해석 은 매우 강하 다.
http://episte.math.ntu.edu.tw/articles/mm/mm_10_2_04/index.html
링크 를 남기 고 천천히 공부 하 세 요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Q7.1.1 한 그룹의 수의 조합을 모두 열거하다제목: 하나의 수조 안의 수의 조합을 모두 열거합니다. 예를 들어 1과 2열은 1,2,12,21입니다. 분석: 이 문제는 여러 가지 확장이 있는데, 1, 중복된 원소의 수의 조합이 없다(자집의 전체 배열 포함). 2...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.