C++面试题求解

James_Hou-X 2014-08-16 03:47:42
用5、6、6、7、8、9这六个数字,打印出所有不同的排列,如:569678、675968等,要求'8'不能在第三位,'7'与'9'不能相连。
...全文
264 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sffyjui666 2015-09-25
  • 打赏
  • 举报
回复
阿麦 2014-08-17
  • 打赏
  • 举报
回复
当然可以,自己写个容器的实现就行了。
James_Hou-X 2014-08-17
  • 打赏
  • 举报
回复
楼上的各位,不使用STL的容器和算法,可以实现吗?
阿麦 2014-08-17
  • 打赏
  • 举报
回复
唉,我又重复造轮子了。用next_permutation果然方便。

#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
	int v[] = {5,6,6,7,8,9};
	int a[] = {0,1,2,3,4,5};
	int c = 0;
	do
	{
		int p[6];
		for (int i = 0; i <6; i++)
		{
			p[a[i]] = i;
		}
		if (p[4] != 2 && abs(p[3] - p[5]) != 1 && p[1] < p[2])
		{
			printf("%3d:%d%d%d%d%d%d\n", ++c, v[a[0]], v[a[1]], v[a[2]], v[a[3]], v[a[4]], v[a[5]]);
		}
	}
	while (next_permutation(a,a+6));
	system("pause");
	return 0;
}
阿麦 2014-08-17
  • 打赏
  • 举报
回复
是这样吗?

.....
  186:967865
  187:985667
  188:985676
  189:985766
  190:986567
  191:986576
  192:986657
  193:986675
  194:986756
  195:986765
  196:987566
  197:987656
  198:987665
代码:

#include <iostream>
#include <set>
using namespace std;

set<int> M;

void show(int *k, int n)
{
	static int count = 0;
	static const int value[6] = {5,6,6,7,8,9};
	if (n >= 6)
	{
		bool OK = (k[2] != 4); // 8不在第三位
		if (OK)
		{
			int k7,k9;
			for (int i = 0; i < 6; i++)
			{
				if (k[i] == 3) k7 = i; // 7所在的位置
				if (k[i] == 5) k9 = i; // 9所在的位置
			}
			OK = abs(k7 - k9) != 1;
			if (OK)
			{
				int s = 0;
				for (int i = 0; i < 6; i++)
				{
					s = s * 10 + value[k[i]];
				}
				if (M.insert(s).second)
				{
					printf("%5d:%d\n", ++count, s);
				}
			}
		}
		return;
	}
	for (k[n] = 0; k[n] < 6; k[n]++)
	{
		bool OK = true;
		for (int i = 0; OK && i < n; i++)
		{
			OK = (k[i] != k[n]);
		}
		if (OK)
		{
			show(k, n+1);
		}
	}
}
int main()
{
	int k[6];
	show(k, 0);
	system("pause");
	return 0;
}
斩不断的风 2014-08-17
  • 打赏
  • 举报
回复
可以用stl的next_permutation,然后判断条件过滤一下就行了

33,010

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧