一、题目回顾

题目链接:Lotto

Sample Input

7 1 2 3 4 5 6 7
8 1 2 3 5 8 13 21 34
0
Sample Output

1 2 3 4 5 6
1 2 3 4 5 7
1 2 3 4 6 7
1 2 3 5 6 7
1 2 4 5 6 7
1 3 4 5 6 7
2 3 4 5 6 7 1 2 3 5 8 13
1 2 3 5 8 21
1 2 3 5 8 34
1 2 3 5 13 21
1 2 3 5 13 34
1 2 3 5 21 34
1 2 3 8 13 21
1 2 3 8 13 34
1 2 3 8 21 34
1 2 3 13 21 34
1 2 5 8 13 21
1 2 5 8 13 34
1 2 5 8 21 34
1 2 5 13 21 34
1 2 8 13 21 34
1 3 5 8 13 21
1 3 5 8 13 34
1 3 5 8 21 34
1 3 5 13 21 34
1 3 8 13 21 34
1 5 8 13 21 34
2 3 5 8 13 21
2 3 5 8 13 34
2 3 5 8 21 34
2 3 5 13 21 34
2 3 8 13 21 34
2 5 8 13 21 34
3 5 8 13 21 34

题意:以升序的形式给定k个数,输出从中挑选6个数满足升序的所有情况。

二、解题思路

  • 两个参数,第一个保存当前搜索的位置,第二个保存已挑选的个数。

三、代码

 #include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int maxn = 1e4+;
#define INF 0x3f3f3f3f
int a[]; //子集S
int b[]; //存放6个数
int k;
bool vis[]; void dfs(int pos,int num)
{
if(num==){
for(int i=;i<;i++) printf("%d ",b[i]);
printf("%d\n",b[]);
return;
}
for(int i=pos;i<k;i++){
if(!vis[i]){
vis[i] = ;
b[num] = a[i];
dfs(i+,num+);
vis[i] = ; //方便下一次序列继续使用
}
} }
int main()
{
int kase = ;
while(cin>>k && !(k==)){
if(kase++) printf("\n"); //打印空行
for(int i=;i<k;i++){ //从0开始
scanf("%d",&a[i]);
}
memset(vis,,sizeof(vis));
dfs(,);
}
return ;
}

最新文章

  1. 4.4 多线程进阶篇&lt;下&gt;(NSOperation)
  2. 2014-2015-2 《Java程序设计》课程学生博客列表
  3. C++之路进阶——bzoj1823(满汉全席)
  4. ASP防注入
  5. H5 App设计者需要注意的21条禁忌
  6. css案例学习之盒子模型
  7. mysql基础入门
  8. 关于ActiveMQ的一点总结
  9. Servlet简介及使用
  10. [H5]range对象之selectNode等方法
  11. submit text3的激活与使用
  12. mybatis:延迟加载时不要在get/set方法上面添加final关键字(原创)
  13. Node.js API快速入门
  14. 如何打印一棵树(Java)
  15. java与C#、.NET AES加密、解密 解决方案
  16. MySQL重装
  17. 《高质量c++/c编程指南》学习摘要
  18. 接口测试Jmeter+Fiddler组合
  19. HDU 5876 Sparse Graph(补图上BFS)
  20. Java从入门到精通——数据库篇Mongo DB GridFS文件系统

热门文章

  1. 浅谈二分查找 JavaScript
  2. checkbox 全选
  3. c++后台开发 准备材料
  4. Percona-Tookit工具包之pt-show-grants
  5. css3新样式
  6. jquery之prop与attr区别。
  7. 用bootstrap框架弄的网站。(首页)
  8. Python练习笔记(2)
  9. Hadoop(24)-Hadoop优化
  10. Linux 内核之api_man 手册安装