排列<一>
理论和习题来源于书本,有些能用计算机模拟的题尽量用代码来解。
1.5个球放在3个不同的盒子里面,允许有盒子不放球,求有多少种可能?
解:穷举,设盒子A,B,C,每个盒子都有0~5个球的可能,但是三个盒子相加必定为5,得到代码:
for(int i=;i<=;i++)
for(int j=;j<=;j++)
for(int k=;k<=;k++)
if(i+j+k==)
cout<<i<<j<<k<<endl;
2.从n个不同元素中,任取m个(n>=m)不同元素,把这个m个元素有顺序地安排在一个单球上,我们叫从n个不同元素取出m个元素的无重复环排列,且环排列数为:
3.书看了一大半,突然想到本源问题,计算机如何模拟排列呢?比如说,排列1,2,3这三个数字,并打印它的所有可能。纸上计算是容易的,6种可能,可是计算机如何执行呢?
设想三个有序的盒子,A,B,C,一字排开,1,2,3做为元素可以放在三个盒子里面,显然是不能重复的。假如盒A放了1,那么盒B只能放2或3,假如盒B放了2,那盒C只能放3,关键的是,三个盒子都有三种可能!现在用for循环的原始办法:
for(int i=;i<=;i++)/*盒子A*/
for(int j=;j<=;j++)/*盒子B*/
{
if(i==j)/*不能相同于盒子A*/
continue;
else
{
for(int k=;k<=;k++)/*盒子C*/
{
if(k==i || k==j)/*不能相同于盒子A或B*/
continue;
else /*此处可继续嵌套*/
cout<<i<<j<<k<<endl;
}
}
}
如果有四个元素,可以在内部再嵌套。整个代码有规律的像锥子一般向右边延伸...这里采用的思路是逐个安置,先安排A,再安排B,再安排C....以此类推...虽然深度搜索也能解决,但显然,这个思路更简单和容易理解!
4.排列的改进:
/*三个数的排列,改进*/
#include <iostream>
using namespace std;
int a[];
int b[]={,,};
int main()
{
for(int i=;i<;i++)/*盒子A*/
{
a[]=b[i];
for(int j=;j<;j++)/*盒子B*/
{
if(a[]==b[j])/*不能相同于盒子A*/
continue;
else
{
a[]=b[j];
for(int k=;k<;k++)/*盒子C*/
{
if(a[]==b[k] || a[]==b[k])/*不能相同于盒子A或B*/
continue;
else /*此处可继续嵌套*/
{
a[]=b[k];
for(int g=;g<;g++)/*得到一组排列*/
cout<<a[g]<<" ";
cout<<endl;
}
}
}
}
}
return ;
}
5.
排列<一>的更多相关文章
- 学习sql中的排列组合,在园子里搜着看于是。。。
学习sql中的排列组合,在园子里搜着看,看到篇文章,于是自己(新手)用了最最原始的sql去写出来: --需求----B, C, F, M and S住在一座房子的不同楼层.--B 不住顶层.C 不住底 ...
- [LeetCode] Arranging Coins 排列硬币
You have a total of n coins that you want to form in a staircase shape, where every k-th row must ha ...
- [LeetCode] Next Permutation 下一个排列
Implement next permutation, which rearranges numbers into the lexicographically next greater permuta ...
- js学习篇--数组按升序降序排列
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- SDOI 2016 排列计数
题目大意:一个数列A,n个元素,其中m个元素不动,其他元素均不在相应位置,问有多少种排列 保证m个元素不动,组合数学直接计算,剩余元素错位排列一下即可 #include<bits/stdc++. ...
- 排列组合算法的javascript实现
命题:从成员数为N的集合S中,选出M个元素,分别求其排列与组合结果集,即 A(N, M)与C(N, M) js解法: function queue(arr, size){ if(size > a ...
- 剑指Offer面试题:26.字符串的排列
一.题目:字符串的排列 题目:输入一个字符串,打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a.b.c所能排列出来的所有字符串abc.acb.bac.bca.cab和cba. 二 ...
- .NET平台开源项目速览(11)KwCombinatorics排列组合使用案例(1)
今年上半年,我在KwCombinatorics系列文章中,重点介绍了KwCombinatorics组件的使用情况,其实这个组件我5年前就开始用了,非常方便,麻雀虽小五脏俱全.所以一直非常喜欢,才写了几 ...
- 【原创】开源.NET排列组合组件KwCombinatorics使用(三)——笛卡尔积组合
本博客所有文章分类的总目录:本博客博文总目录-实时更新 本博客其他.NET开源项目文章目录:[目录]本博客其他.NET开源项目文章目录 KwCombinatorics组件文章目录: 1. ...
- 【原创】开源.NET排列组合组件KwCombinatorics使用(二)——排列生成
本博客所有文章分类的总目录:本博客博文总目录-实时更新 本博客其他.NET开源项目文章目录:[目录]本博客其他.NET开源项目文章目录 KwCombinatorics组件文章目录: 1. ...
随机推荐
- TEXT 4 A question of standards
TEXT 4 A question of standards 一个关乎标准的问题 Feb 9th 2006 From The Economist Global Agenda More suggesti ...
- Haskell语言学习笔记(60)Biapplicative
Biapplicative class Bifunctor p => Biapplicative p where bipure :: a -> b -> p a b (<< ...
- JAVA 打印流与转换流
转换流主要有两个 InputStreamReader 和 OutputStreamWriter 1. InputStreamReader 主要是将字节流输入流转换成字符输入流 2. OutputStr ...
- 安装 neo4j 在 .../bin 目录下使用 ./neo4j 没反应 和 从csv 导入数据到neo4j
可以使用 /bin/sh ./neo4j start 如果提示:./neo4j: 28: set: Illegal option -o pipefail 那么 ubuntu”set Illegal o ...
- uwsgi相关问题
启动时报错: !!! no internal routing support, rebuild with pcre support !!!安装时 : sudo pip install uwsgi -I ...
- Swagger+ springfox +Spring mvc
简介 Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目标是使客户端和文件系统作为服务器以同样的速度来更新.文件的方法,参数和模型紧密集 ...
- C#aspx页面前台使用<%=%>无法取到后台的值
检查是不是有拼接问题,正常public和protected修饰的字段或属性均可使用<%=%>.另外,加载(Page_Load)时有没有给它们赋初始值? 答 1)前台页面只能调用本后置代码的 ...
- poj1661 (DP)
题目链接:http://poj.org/problem?id=1661 思路: 把初始位置看成左,右端点均为x0,即长度为0,高度为y0的一个平台,按照平台高度从低到高排序.用dp[i][0],dp[ ...
- docker在centos和Ubuntu的安装
CentOS: http://blog.csdn.net/wuapeng/article/details/51728614 rpm -Uvh http://www.elrepo.org/elrepo- ...
- 【校招面试 之 C/C++】第12题 C++ 重载、重写和重定义
1.成员函数重载特征: a.相同的范围(在同一个类中): b.函数名字相同: c.参数不同(参数个数不同或者参数类型不同,但是返回值不同不能使重载): d.virtual关键字可有可无. 2.重写 ...