전체 배열의 귀속 실현을 되찾다

1711 단어

2. 중복된 전체 배열의 귀속 실현을 제거한다


전체 배열은 첫 번째 숫자부터 각 숫자가 각각 그 뒤의 숫자와 교환되기 때문이다.우리는 먼저 이런 판단을 해 보자. 만약 한 수가 뒤의 숫자와 같다면 이 두 수는 교환되지 않을 것이다.예를 들어 122와 같이 첫 번째 수는 뒤와 212, 211로 교환된다.그리고 122에서 두 번째 수는 세 번째 수와 교환할 필요가 없지만 212에 대해 두 번째 수는 세 번째 수와 다르다. 교환한 후에 221을 얻는다.122에서 첫 번째 수와 세 번째 수를 교환하여 얻은 221과 중복되었다.그래서 이 방법은 안돼.
환종 사고는 122, 첫 번째 수 1과 두 번째 수 2를 교환한 다음에 첫 번째 수 1과 세 번째 수 2를 교환하는 것을 고려한다. 이때 세 번째 수는 두 번째 수와 같기 때문에 첫 번째 수는 세 번째 수와 교환하지 않는다.212를 고려하면 두 번째 수와 세 번째 수의 교환은 해결될 수 있다.이 때 전체 배열이 생성됩니다.
이렇게 해서 우리는 전체 배열에서 중복을 없애는 규칙을 얻었다. 중복을 없애는 전체 배열은 첫 번째 숫자부터 각 숫자가 그 뒤에 중복되지 않은 숫자와 교환되는 것이다.다음은 전체 코드입니다.
// AllRange.cpp :  。
//

#include "stdafx.h"
#include<string>
#include <iostream>

void swap(char* a,char* b)
{
	char temp;
	temp = *a;
	*a=*b;
	*b=temp;

}
bool isSwap(char* str,int begin,int end)
{
	for(int i=begin;i<end;i++)
	{
		if(str[i]==str[end])
			return false;
	}
	return true;

}
void AllRange(char* str,int k,int m)
{
	if(k == m)
	{
		printf("%s
",str); } else { for(int i=k;i<m;i++) { if (isSwap(str,k,i)) { swap(str+k,str+i); AllRange(str,k+1,m); swap(str+k,str+i); } } } } void Full(char* str) { AllRange(str,0,strlen(str)); } int _tmain(int argc, _TCHAR* argv[]) { char str[]="122"; Full(str); system("pause"); return 0; }

좋은 웹페이지 즐겨찾기