32-组合数

内存限制:64MB
时间限制:3000ms
Special Judge: No

accepted:8
submit:11

题目描述:

找出从自然数1、2、... 、n(0<n<10)中任取r(0<r<=n)个数的所有组合。

输入描述:

输入n、r。

输出描述:

按特定顺序输出所有组合。
特定顺序:每一个组合中的值从大到小排列,组合之间按逆字典序排列。

样例输入:

复制

5 3

样例输出:

543
542
541
532
531
521
432
431
421
321 分析:
  ①、要求从n个元素中选m个元素,其实就是从全排列中选择它的前m项就行了;
  ②、因为本题对顺序做了限制,所以我们还要将选出的元素排序、去重; 步骤:
  ①、首先来说,我们要产生一组全排列,这里我们通过STl中的next_permutation
  ②、将每个全排列前m项取出,排序后插入set(PS:set具有去重的功能)
  ③、将从set取出的每一个值依次放入栈(stack)中(利用栈的“先进后出”)
  ④、从栈(stack)中取出、输出 核心代码:
  
 do
{
if(!equal(A, A + m, temp)) // 解释:如果数组A的前m个元素与temp两个数组不相等
{
for(int i = ; i < m; ++ i)
temp2[i] = temp[i] = A[i];
sort(temp2, temp2 + m, greater<int>());
string s;
for(int i = ; i < m; ++ i)
s += char('' + temp2[i]);
my_set.insert(s);
}
}
while(next_permutation(A, A + n));

C/C++代码实现(AC):

 #include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <stack>
#include <map>
#include <queue>
#include <set> using namespace std;
const int MAXN = ;
int A[MAXN]; void cal_array(int n)
{
for(int i = ; i < n; ++ i)
A[i] = i + ;
} int main()
{ int n, m, temp[MAXN] = {}, temp2[MAXN] = {};
scanf("%d%d", &n, &m);
set <string> my_set;
set <string> ::iterator iter;
stack <string> my_stack;
cal_array(n);
do
{
if(!equal(A, A + m, temp)) // 解释:如果数组A的前m个元素与temp两个数组不相等
{
for(int i = ; i < m; ++ i)
temp2[i] = temp[i] = A[i];
sort(temp2, temp2 + m, greater<int>());
string s;
for(int i = ; i < m; ++ i)
s += char('' + temp2[i]);
my_set.insert(s);
}
}
while(next_permutation(A, A + n)); for(iter = my_set.begin(); iter != my_set.end(); ++ iter)
my_stack.push(*iter);
while(!my_stack.empty())
{
cout <<my_stack.top() <<endl;;
my_stack.pop();
}
return ;
}

nyoj 32-组合数(next_permutation, stack, set)的更多相关文章

  1. nyoj 32 组合数

    组合数 时间限制:3000 ms  |            内存限制:65535 KB 难度:3   描述 找出从自然数1.2.... .n(0<n<10)中任取r(0<r< ...

  2. nyoj 32 组合数【简单dfs】

    组合数 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 找出从自然数1.2.... .n(0<n<10)中任取r(0<r<=n)个数的所有组合 ...

  3. 全排列函数 nyoj 366(next_permutation()函数)

    C++ STL中提供了std::next_permutation与std::prev_permutation可以获取数字或者是字符的全排列,其中std::next_permutation提供升序.st ...

  4. nyoj 2 括号配对问题(stack)

    括号配对问题 时间限制:3000 ms  |            内存限制:65535 KB 难度:3   描述 现在,有一行括号序列,请你检查这行括号是否配对.   输入 第一行输入一个数N(0& ...

  5. NYOJ 53 最少步数

    题      目    http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=58 思路借鉴   DFS-Deep First Search-深度优先 ...

  6. (各个公司面试原题)在线做了一套CC++综合測试题,也来測一下你的水平吧(二)

    刚才把最后的10道题又看了下.也发上来吧. 以下给出试题.和我对题目的一些理解 前10道题地址 (各个公司面试原题)在线做了一套CC++综合測试题.也来測一下你的水平吧(一) 11.设已经有A,B,C ...

  7. [原]NYOJ-组合数-32

    大学生程序代写 http://acm.nyist.net/JudgeOnline/problem.php?pid=32 /*组合数 时间限制:3000 ms  |  内存限制:65535 KB 难度: ...

  8. [技术] OIer的STL入门教程

    注: 本文主要摘取STL在OI中的常用技巧应用, 所以可能会重点说明容器部分和算法部分, 且不会讨论所有支持的函数/操作并主要讨论 C++11 前支持的特性. 如果需要详细完整的介绍请自行查阅标准文档 ...

  9. [技术] OIer的C++标准库 : STL入门

    注: 本文主要摘取STL在OI中的常用技巧应用, 所以可能会重点说明容器部分和算法部分, 且不会讨论所有支持的函数/操作并主要讨论 C++11 前支持的特性. 如果需要详细完整的介绍请自行查阅标准文档 ...

随机推荐

  1. (21)ASP.NET Core EF创建模型(关系)

    1.关系 关系定义两个实体之间的关系.在关系型数据库中,这由外键约束表示. 2.术语定义 有许多术语用于描述关系:●相关实体:这是包含外键属性的实体.有时称为关系的"子级".●主体 ...

  2. div设置contenteditable 的小技巧

    div设置contenteditable="true",即可编辑,除从网页粘贴过来内容的格式 <div contenteditable="true" id ...

  3. 第三方软件 G6ftp提权

    步骤 1.下载配置文件 将administrator 2.利用lcx 端口转发 默认只允许本机连接 3.lcx.exe -tran 8027 127.0.0.1 8021 4.使用客户端以管理员用户登 ...

  4. python模块-time、datetime

    简单示例: 常用函数封装: # -*- coding: utf-8 -*- # @Time : 2019/8/6 14:37 # @Author : wangmengmeng import datet ...

  5. 使用 Hexo,Material Theme 以及 Github Pages 搭建个人博客

    准备条件 Node.js npm Git GitHub账号 开始搭建 hexo init Blog cd Blog npm install hexo-deployer-git --save npm i ...

  6. 百万年薪python之路 -- 请求跨域和CORS协议详解

    楔子 什么是同源策略 同源策略,它是由Netscape提出的一个著名的安全策略.现在所有支持JavaScript 的浏览器都会使用这个策略.所谓同源是指,域名,协议,端口相同.当一个浏览器的两个tab ...

  7. lable的渲染

    <StackPanel Margin=" TextOptions.TextFormattingMode="Display"> <Label TextOp ...

  8. Android9.0 如何区分SDK接口和非 SDK接口

    刚刚有同学问我,不太了解 "非SDK接口" 是什么意思?android9.0有什么限制 ?apache的http也有限制 ? 而且现在的大部分系统都升级上来了,黑名单.灰名单和白名 ...

  9. 设计模式(十八)Memento模式

    在使用面向对象编程的方式实现撤销功能时,需要事先保存实例的相关状态信息.然后,在撤销时,还需要根据所保存的信息将实例恢复至原来的状态. 要想恢复实例,需要一个可以自由访问实例内部结构的权限.但是,如果 ...

  10. 针对工程实践项目的用例建模Use Case Modeling

    一.什么是用例建模(Use Case Modeling) 1.用例(Use Case) (1)概念:用例是软件工程或系统工程中对系统如何反应外界请求的描述,是一种通过用户的使用场景来获取需求的技术. ...