概述
现在将会写一系列各种IT公司招聘的笔试面试题博客(自己学习和讨论)。
欢迎大家提出好的意见。共同讨论,共同进度。
一.字符串或数字的全排列问题(百度笔试题)
题目:
求一个全排列函数,如P([1,2,3])输出:
【123】、【132】、【213】、【231】、【321】、【312】
解答:
方法一:
一个数或(字符)的全排列是其本身,比如1的全排列就是1
两个数或(字符)的全排列是将其交换,比如12的全排列是12,21
三个数的全排列:1.可以将第一个数不变,后面进行全排列,1不变,23全排列,结果为123,132
2.将第二个数与第一个数交换,然后将后面的数全排列,2不变,13全排列,结果为,213,231
3.姜第三个数与第一个数交换,然后将后面的数全排列,3,不变,21排列,结果为 321,312
四个以此类推……
这是一种递归的方法,将大的问题,逐步小化。
方法二:
运用STL中的求下一个排列的思想。
1.运用STL的sort()将数组进行排序。
2.运用next_permutation();求下一个排列
代码实现:
方法一:
- #include <iostream>
- using namespace std;
- void swap(char& a,char& b)
- {
- char temp;
- temp=a;
- a=b;
- b=temp;
- }
- void permutation(char* str,int k,int m)
- {
- if (k>m)
- {
- cout<<str<<endl;
- }
- else
- {
- for (int i=k;i<=m;i++)
- {
- swap(*(str+k),*(str+i));
- permutation(str,k+1,m);
- swap(*(str+k),*(str+i));
- }
- }
- }
- int main()
- {
- char str[]="123";
- permutation(str,0,2);
- return 0;
- }
方法二:
- #include <iostream>
- #include <algorithm>
- using namespace std;
- void permutation(char* str, int k, int m)
- {
- sort(str,str+strlen(str));
- int i=k;
- do
- {
- cout<<str<<endl;
- } while (next_permutation(str,str+strlen(str)));
- }
- int main()
- {
- char str[]="123";
- permutation(str,0,2);
- return 0;
- }
最后
以上就是畅快老虎为你收集整理的C++笔试题的全部内容,希望文章能够帮你解决C++笔试题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复