IT amateurs
  • 开始
  • 关于我们
  • C语言基础
  • 言论
    • 苏杰马克丁的真相
  • 网络wiki
    • Google 应用程序引擎
    • Pandownload 百度云快速下载服务
    • 虚拟个人网络
  • 每周哲思
    • 沉思录
Powered by GitBook
On this page
  • 0001 求26个字母的全排列
  • Have you had a chance to answer the previous question?

C语言基础

递归、迭代、循环、查找、排序

0001 求26个字母的全排列

That's a tough question but thankfully, our team is on it. Please bear with us while we're investigating.

#include <stdio.h>
#include <iostream>
using namespace std;
#define N 10
include
#include <stdio.h>
using namespace std;
 
int n;
char a[] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w',
'x','y','z'};
int ​count=0;
 
void swap(int x,int y)
{
	int tmp;
	tmp = a[x];
	a[x] = a[y];
	a[y] = tmp;
}
 
void search(int k)
{
	int i;
	
	if(k == n)
	{	
		for(i = 0;i < n;i++)
		{
			cout << a[i];
			
		}
		++count;

		cout << endl;
	}
	else
	{
		for(i = k;i < n;i++)
		{
			swap(i,k);
			search(k+1);
			swap(i,k);
		}
		
	}
		
	
}
 
int main()
{
	cin >> n;
	search(0);
	printf("共%d种",count); 

	return 0;
}

此题的思路很简单。对于一个不含重复元素的全排列,使用递归划分,第一次{a}search(0,0)自己与自己排列看成已排列好,第二次{a,b},search(c),以此类推,直到只剩一个,表示已经排好,然后从头开始排列{a,c},search(b)……

Have you had a chance to answer the previous question?

Yes, after a few months we finally found the answer. Sadly, Mike is on vacations right now so I'm afraid we are not able to provide the answer at this point.

Previous关于我们Next苏杰马克丁的真相

Last updated 6 years ago