排列<一>
理论和习题来源于书本,有些能用计算机模拟的题尽量用代码来解。
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. ...
随机推荐
- 【干货】国外程序员整理的 C++ 资源大全(转)
转zi:http://www.csdn.net/article/2014-10-24/2822269-c++ 关于 C++ 框架.库和资源的一些汇总列表,由 fffaraz发起和维护. 内容包括:标准 ...
- 关于str.split(",")中间 什么时候该加\\转义
java 分割符,对于某些符号的分割符进行切割的时候需要加转义字符,我贴上例子 1. package test1; public class split { public static void ma ...
- 面向对象三大特性一一封装(encapsulation)
为什么要封装? 我们看电视,只要按一下开关和换台就行了.有必要了解电视的内部结构吗?有必要了解显像管吗? 封装是为了隐藏对象内部的复杂性,只对外公开简单的接口.便于外界调用,从而提高系统的可扩展性,可 ...
- (转)游戏引擎中三大及时光照渲染方法介绍(以unity3d为例)
重要:在目前市面上常见的游戏引擎中,主要采用以下三种灯光实现方式: 顶点照明渲染路径细节 Vertex Lit Rendering Path Details 正向渲染路径细节 Forward Rend ...
- HttpClientUtil 工具类
/* * * * FileName: s.java * * Description:TODO(用一句话描述该文件做什么) * * Created: jiangzhanghong 2017年11月14日 ...
- Unicode、UTF8与UTF16
1 概念 Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案 UTF是“Unicode Transformation Format”的缩写,可以翻译成Unicode字符集转换格式 ...
- 转-git 配置用户名和邮箱
原址:http://www.cnblogs.com/fsong/p/5540840.html 在安装了git for windows之后,个人总是忘记配置git config的命令,以此记录一下: 配 ...
- js:二级联动示例
联动原理 当用户点击省级的下拉选项,选择所在省,下一个下拉选项里的选项,则变成用户选择省下的所有市的信息,不会出现其它省市的信息. 省市数据 把省市数据,保存在js文件中,以json形式保存,以便读取 ...
- Sum of Consecutive Prime Numbers
Sum of Consecutive Prime Numbers http://poj.org/problem?id=2739 Time Limit: 1000MS Memory Limit: 6 ...
- FileUpload控件实现单按钮图片自动上传并带预览显示
FileUpload控件实现单按钮图片自动上传并带预览显示 1.实现原理: FileUpload控件默认不支持服务端的ONCHANGE事件,此时用一种变通的方法借用客户端的onchange事件,调 ...