理论和习题来源于书本,有些能用计算机模拟的题尽量用代码来解。

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.

  

排列<一>的更多相关文章

  1. 学习sql中的排列组合,在园子里搜着看于是。。。

    学习sql中的排列组合,在园子里搜着看,看到篇文章,于是自己(新手)用了最最原始的sql去写出来: --需求----B, C, F, M and S住在一座房子的不同楼层.--B 不住顶层.C 不住底 ...

  2. [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 ...

  3. [LeetCode] Next Permutation 下一个排列

    Implement next permutation, which rearranges numbers into the lexicographically next greater permuta ...

  4. js学习篇--数组按升序降序排列

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. SDOI 2016 排列计数

    题目大意:一个数列A,n个元素,其中m个元素不动,其他元素均不在相应位置,问有多少种排列 保证m个元素不动,组合数学直接计算,剩余元素错位排列一下即可 #include<bits/stdc++. ...

  6. 排列组合算法的javascript实现

    命题:从成员数为N的集合S中,选出M个元素,分别求其排列与组合结果集,即 A(N, M)与C(N, M) js解法: function queue(arr, size){ if(size > a ...

  7. 剑指Offer面试题:26.字符串的排列

    一.题目:字符串的排列 题目:输入一个字符串,打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a.b.c所能排列出来的所有字符串abc.acb.bac.bca.cab和cba. 二 ...

  8. .NET平台开源项目速览(11)KwCombinatorics排列组合使用案例(1)

    今年上半年,我在KwCombinatorics系列文章中,重点介绍了KwCombinatorics组件的使用情况,其实这个组件我5年前就开始用了,非常方便,麻雀虽小五脏俱全.所以一直非常喜欢,才写了几 ...

  9. 【原创】开源.NET排列组合组件KwCombinatorics使用(三)——笛卡尔积组合

           本博客所有文章分类的总目录:本博客博文总目录-实时更新 本博客其他.NET开源项目文章目录:[目录]本博客其他.NET开源项目文章目录 KwCombinatorics组件文章目录: 1. ...

  10. 【原创】开源.NET排列组合组件KwCombinatorics使用(二)——排列生成

           本博客所有文章分类的总目录:本博客博文总目录-实时更新 本博客其他.NET开源项目文章目录:[目录]本博客其他.NET开源项目文章目录 KwCombinatorics组件文章目录: 1. ...

随机推荐

  1. Mybatis知识(2)

    1.#{}和${}的区别是什么? 注:这道题是面试官面试我同事的. 答:${}是Properties文件中的变量占位符,它可以用于标签属性值和sql内部,属于静态文本替换,比如${driver}会被静 ...

  2. request.getParameterMap()获得Map中的数据

    今天使用request.getParameterMap()获得Map中的数据时,使用        Map map=request.getParameterMap();               i ...

  3. JAVA动态性之一一反射机制reflection

    package com.bjsxt.reflection.test.bean; public class User { private int id; private int age; private ...

  4. JSP通过表格显示数据库的信息

    [step one] 1-1 建立数据库 在jsp中,我们使用的是mysql数据库,对于此数据的优缺点本篇不予以讲述,首先建立news数据库,其数据库中表的信息为: eg:< id :1 ; n ...

  5. Mysql Innodb 性能参数设置 https://www.rathishkumar.in/2017/01/how-to-allocate-innodb-buffer-pool-size-in-mysql.html

    参考原文: https://www.rathishkumar.in/2017/01/how-to-allocate-innodb-buffer-pool-size-in-mysql.html 查看系统 ...

  6. 如何设置maven的local repository目录

    step1:默认会放在~/.m2/repository目录下 (“~”代表用户的目录,比如windows下一般都是C:\Documents and Settings\[你的用户名]\.由于“Docum ...

  7. 第七章 二叉搜索树(c)平衡与等价

  8. 解决SpringBoot中webScocket不能注入bean的问题

    最近在做websocket聊天,但是遇到一个问题,就是在websocket的服务中要调用Service层的东西.首先我想到的是通过@Autowire注解来实现bean的注入.但是进过测试发现,注入的b ...

  9. PAT L1-009 N个数求和(模拟分数加法)

    本题的要求很简单,就是求N个数字的和.麻烦的是,这些数字是以有理数“分子/分母”的形式给出的,你输出的和也必须是有理数的形式. 输入格式: 输入第一行给出一个正整数N(<=100).随后一行按格 ...

  10. 165. Compare Version Numbers比较版本号的大小

    [抄题]: Compare two version numbers version1 and version2.If version1 > version2 return 1; if versi ...