简单的排列组合-使用枚举

有五种颜色,每次取出三种,要求颜色无重复

 1 #include<stdio.h>
 2
 3 int main(void)
 4 {
 5     enum color{blue,red,yellow,purple,black};
 6     enum color i,j,k,pri;
 7
 8     int n,loop;
 9     n=0;
10
11     for(i=blue;i<=black;++i)
12     {
13         for(j=blue;j<=black;++j)
14         {
15             if(i!=j)
16             {
17                 for(k=blue;k<=black;++k)
18                 {
19                     if((k!=i)&&(k!=j))
20                     {
21                         ++n;
22                         printf("%-6d",n);
23                         for(loop=1;loop<=3;++loop)
24                         {
25                             switch(loop)
26                             {
27                                 case 1:pri=i;
28                                        break;
29                                 case 2:pri=j;
30                                        break;
31                                 case 3:pri=k;
32                                        break;
33                                 default:
34                                        break;
35                             }
36                             switch(pri)
37                             {
38                                 case blue:printf("%-10s","blue");
39                                           break;
40                                 case red :printf("%-10s","red");
41                                           break;
42                                 case yellow:printf("%-10s","yellow");
43                                             break;
44                                 case purple:printf("%-10s","pueple");
45                                             break;
46                                 case black:printf("%-10s","black");
47                                 default:
48                                            break;
49                             }
50                         }
51                         printf("\n");
52                     }
53                 }
54             }
55         }
56     }
57     printf("total : %5d\n",n);
58     return 0;
59 }
时间: 2024-10-17 07:14:43

简单的排列组合-使用枚举的相关文章

LA 7360 Run Step (排列组合,枚举)

题意:给定一个数 n ,表示一共有 n 步,然后你可以迈一步也可以迈两步,但是左腿和右腿的一步和两步数要一样,并且两步数不小于一步数,问你有多少种方式. 析:虽然是排列组合,但还是不会做.....水啊. 思路是先分开算,先算左腿的,再算右腿的,对左腿先枚举2步的,然后再算一步的,主要是这个怎么算,我就迷茫了,.... 其实并不难,我们先假设左腿有 i 个1步的和 j 个两步的,那么组合数有多少呢?很明显么,就是C(i+j, i)么,就是找 i 位置给 i. 那么剩下的就简单了. 代码如下: #p

一些简单的排列组合问题

排列及计算公式 从n个不同元素中,任取m(m≤n)个元素按照一定的顺序排成一列,叫做从n个不同元素中取出m个元素的一个排列:从n个不同元素中取出m(m≤n)个元素的所有排列的个数,叫做从n个不同元素中取出m个元素的排列数,用符号 A(n,m)表示或 [P(n,m)]表示. A(n,m)=n(n-1)(n-2)--(n-m+1)= n!/(n-m)!(当n=m时,上述式子分母为0!=1). 组合及计算公式 从n个不同元素中,任取m(m≤n)个元素并成一组,叫做从n个不同元素中取出m个元素的一个组合

js 排列 组合 的一个简单例子

最近工作项目需要用到js排列组合,于是就写了一个简单的demo. 前几天在网上找到一个写全排列A(n,n)的code感觉还可以,于是贴出来了, 排列的实现方式: 全排列主要用到的是递归和数组的插入 比如12的全排列,首先把1拿出来放到elementCur,再获取由1组成的数组[2],然后在循环把1插入到0,1的位置后再返回1,2][2,1] 如果是123那么首先获取23的全排列[2,3][3,2],然后在插入1,[1,2,3][2,1,3][2,3,1][1,3,2][3,1,2][3,2,1]

UVA 12712 Pattern Locker(简单排列组合数学题)

转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4450 不懂取模运算的请猛戳:http://baike.baidu.com/link?url=A86lTLorv-Mim9g6v8EW3mY98qLz10cot1UCt6TZNPDJyslVYS5Ya1K

排列组合的实现

数据库环境:SQL SERVER2008R2 先说一下需求:实现1,2,3的排列组合,即123,132,213,231,312,321. 哈哈,你没看错,需求这是这么短短的一句话. 我想到了2个方法,都可以实现需求.下面我分别介绍这2种实现方法. 方法一:建一个表xx,往xx表中插入1,2,3自然数列,简单起见,把自然数改成字符串, 然后xx表和xx表进行FULL JOIN(全外连接)得到结果集tmp,结果集tmp再和xx表进行LEFT JOIN(左连接), 关联的条件是当前xx表的数据不存在结

HDU--5396(区间dp+排列组合)

做这道题的时候,想到会不会是dp,然后发现dp可做,但是一直被自己坑到死. 枚举最后合并的那个位置,然后对于加减号的,分成的前后两个部分都有不同的组合方法, (a1+a2........) +  (b1,b2.............)         对于每个a,被加b的个数的阶乘次 ,对于每个b,被加a的个数的阶乘次 减法同理 乘法特殊一点 (a1+a2........) *  (b1,b2.............)  乘法分配率,直接将两部分的总和相乘即可 想到这些还远远没有结束,因为最

排列组合问题之圆形分布

1.问题1.1 团团坐有一张圆桌,坐了A,B,C,D四个人,已知,D在A的右边,C在D的对面,请问A,B,C,D,的坐次? 解答:这个问题相对简单,我们纸上画一画,就能画出他们的可能的位置了 但是,可能还有一种解,比如我们把A,B,C,D依次右转一个位,也是满足条件的,而且只要保持他们的相对位置不变,依次右转n个位都是问题的解,而且还有个有趣的事情,当他们转了一圈(即右转4个位)后,他们右回到原位了 2.圆形分布上面这个问题就是一种圆形分布,那么他和直线分布的区别在哪里呢?又有什么联系呢?上面文

python 实现排列组合

1.python语言简单.方便,其内部可以快速实现排列组合算法,下面做简单介绍. 2.一个列表数据任意组合 2.1主要是利用自带的库 #_*_ coding:utf-8 _*_ #__author__='dragon' import itertools list1 = [1,2,3,4,5] list2 = [] for i in range(1,len(list1)+1): iter = itertools.combinations(list1,i) list2.append(list(ite

SPOJ - AMR11H Array Diversity (水题排列组合或容斥)

题意:给定一个序列,让你求两种数,一个是求一个子序列,包含最大值和最小值,再就是求一个子集包含最大值和最小值. 析:求子序列,从前往记录一下最大值和最小值的位置,然后从前往后扫一遍,每个位置求一下数目就好. 求子集可以用排列组合解决,很简单,假设最大值个数是 n,最小值的数是 m,总数是 N,答案就是 (2^n-1) * (2^m-1)*2^(N-m-n), 当然要特殊判断最大值和最小值相等的时候. 当然也可以用容斥来求,就是总数 - 不是最大值的数目 - 不是最小值的数目 + 不是最大值也不是