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. jquery 获取input的值

    $("input").attr("value")   --  获取的是input的默认值 $("input").val()         ...

  2. opensuse下安装redis

    1.安装gcc zypper install gcc 2.解压,安装到指定路径 sudo tar xzf redis-4.0.1.tar.gzcd redis#安装到指定目录中sudo make PR ...

  3. ESP8266开发之旅 网络篇⑧ SmartConfig——一键配网

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

  4. Linux配置部署_新手向(五)——Docker的安装与使用

    前言 最近还是在考虑Linux下net core的部署问题,还是发现了很多麻烦的问题,这里还是继续把需要使用的东西部署介绍下吧. Docker 其实对于Docker我也是一星半点儿,了解的不够深入,大 ...

  5. 百万年薪python之路 -- 面向对象之继承

    面向对象之继承 1.什么是面向对象的继承 继承(英语:inheritance)是面向对象软件技术当中的一个概念. 通俗易懂的理解是:子承父业,合法继承家产 专业的理解是:子类可以完全使用父类的方法和属 ...

  6. Mybaits 源码解析 (四)----- SqlSession的创建过程(看懂框架源码再也不用死记硬背面试题)

    SqlSession是mybatis的核心接口之一,是myabtis接口层的主要组成部分,对外提供了mybatis常用的api.myabtis提供了两个SqlSesion接口的实现,常用的实现类是De ...

  7. C#解析深浅拷贝

    前言 前面我们学习完了设计模式,在其中我们有了解到原型模式.这里涉及到了克隆自身对象.那么也就是对对象进行拷贝.这里就涉及到了这么一个概念.深浅拷贝.何为深拷贝何为浅拷贝呢?我们一起来看看吧. 浅拷贝 ...

  8. 一次PHP代码上线遇到的问题

    exception ‘CDbException’ with message ‘The table “pms_goods” for active record class “PmsGoods” cann ...

  9. django-模板之模板变量(二)

    将views中的变量传递给html界面 book/views.py from django.views import View from django.shortcuts import render ...

  10. MySQL在渗透测试中的应用

    原文地址:https://xz.aliyun.com/t/400 前言作为一个安全爱好者你不可能不知道MySQL数据库,在渗透过程中,我们也很经常遇到MySQL数据库的环境,本文就带大家了解MySQL ...