组合 z

输入a b c d e以及它们对应的数字
比如
a-->1 2 3 
b-->2 3
c-->1
d-->3 4 5
e-->1 3 5
输出a b c d e的可用组合,a b c d e不重复,如
a-->2
b-->3
c-->1
d-->4
e-->5

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var dict = new Dictionary<char, List<int>>()
            {
                { ‘a‘, new List<int> { 1, 2, 3 } },
                { ‘b‘, new List<int> { 2, 3 } },
                { ‘c‘, new List<int> { 1 } },
                { ‘d‘, new List<int> { 3, 4, 5 } },
                { ‘e‘, new List<int> { 1, 3, 5 } }
            };
            foo(dict, new Dictionary<char, int>());
        }

        static void foo(Dictionary<char, List<int>> data, Dictionary<char, int> pre)
        {
            if (data.Count == 0)
            {
                Console.WriteLine("found:");
                foreach (var item in pre.OrderBy(x => x.Key))
                    Console.WriteLine("{0} - {1}", item.Key, item.Value);
                return;
            }
            var first = data.OrderBy(x => x.Value.Count()).First();
            foreach (var item in first.Value)
            {
                foo(data.OrderBy(x => x.Value.Count()).Skip(1).ToDictionary(x => x.Key, x => x.Value.Except(new int[] { item }).ToList()), pre.Cast<KeyValuePair<char, int>>().Concat(new KeyValuePair<char, int>[] { new KeyValuePair<char, int>(first.Key, item) }).ToDictionary(x => x.Key, x => x.Value));
            }
        }
    }
}
时间: 2024-12-19 16:01:42

组合 z的相关文章

做双面幻影成像多少钱

双面幻影成像是一项全新的展示手段,利用光学镜面组合"Z"字外观透明空间,将动态影像悬浮于该空间的中心部位,并可以让观众从两个方向观察到悬浮的立体影像,而且成像尺寸可以定制,因而具有很强的视觉冲击. 双面幻影成像多少钱? 双面幻影成像其实也就是180度幻影成像,其价格受到多方面因素影响,下面来具体说说价格影响因素: 1.幻影成像膜:幻影成像膜是根据尺寸不一样,价格也就不一样,小到几十,大到上千都是有的,根据需求而定. 2.幻影成像内容:内容制作是占大额的,内容有难易.长短.高清标清之分,

在数组中找出x+y+z=0的组合

就是找x+y=-z的组合 转化为找出值为-z满足x+y=-z的组合 解法一: 为了查找,首先想到排序,为了后面的二分,nlogn, 然后x+y的组合得n^2的复杂度,加上查找是否为-z,复杂度为nlogn + n^2 * logn 解法二: 还是先从小到大排序 nlogn 假设数组排序后为 a b c d e f 我们还是要找x+y=-z 会发现-z存在的可能只能是a+f和b+e,不会存在a+e和b+f这种情况(这里很重要,保证了算法的正确性),所以两个指针一头一尾往中间扫,肯定能找出来 fis

定义一个类:实现功能可以返回随机的10个数字,随机的10个字母, 随机的10个字母和数字的组合;字母和数字的范围可以指定,类似(1~100)(A~z)

#习题2:定义一个类:实现功能可以返回随机的10个数字,随机的10个字母, #随机的10个字母和数字的组合:字母和数字的范围可以指定 class RandomString(): #随机数选择的范围作为参数,如(1~100)字母 ('A'~'z'),大写字母在前 按ascii值排列先后 def __init__(self,start_num=0,end_num=100,start_alpha='A',end_alpha='z'): import string if not isinstance(s

【BZOJ】2038: [2009国家集训队]小Z的袜子(hose)(组合计数+概率+莫队算法+分块)

http://www.lydsy.com/JudgeOnline/problem.php?id=2038 学了下莫队,挺神的orz 首先如果推公式的话很简单吧.对于查询$[l,r]$ $$ans=\frac{\sum \binom{x_i}{2}}{\binom{r-l+1}{2}}$$ //晚修...回来补.. #include <cstdio> #include <cstring> #include <cmath> #include <string> #

使用脚本选项及组合条件测试

使用脚本选项及组合条件测试: 整数测试: -le 小于等于 -lt 小于 -ge大于等于 -gt大于 -eq等于 -ne不等于 字符测试: == 等于 != 不等于 >大于 <小于 -n 测试字符串是否为空,空为真 -z 测试字符串是否不为空,不空为真 文件测试: -e 测试文件是否存在 -f 测试文件是否为普通文件 -d测试文件是否为目录 -r测试文件是否有读权限 -w测试文件是否有写权限 -x 测试文件是否有执行权限 组合测试条件 -a 逻辑与 都满足 -o 逻辑或 满足一条即可 !  非

利用原生JS判断组合键

<script type="text/javascript"> var isAlt = 0; var isEnt = 0; document.onkeydown = function(e){ var evn = e||event; var code = evn.keyCode||evn.which||evn.charCode; if(code==13){ isEnt = 1; } if(code==18){ isAlt = 1; } // 判读Alt+Enter组合键 if

【noi 2.6_9288】&amp;【hdu 1133】Buy the Ticket(DP / 排列组合 Catalan+高精度)

题意:有m个人有一张50元的纸币,n个人有一张100元的纸币.他们要在一个原始存金为0元的售票处买一张50元的票,问一共有几种方案数. 解法:(学习了他人的推导后~) 1.Catalan数的应用7的变形.(推荐阅读:http://www.cnblogs.com/chenhuan001/p/5157133.html).P.S.不知我之前自己推出的公式“C(n,m)*C(2*m,m)/(m+1)*P(n,n)*P(m,m)”是否是正确的. (1)在不考虑m人和n人本身组内的排列时,总方案数为C(m+

HDOJ-ACM1015(JAVA) 运用 组合、全排列实现

转载声明:原文转自:http://www.cnblogs.com/xiezie/p/5573934.html 这个题目的题意:(自己结合百度翻译,简单的翻译了一下) “这个项目是在一个在二楼图书馆一幅画的背后的克莱因的保险箱里.克莱因的保险柜是极为罕见的:他们中的大多数都随着克莱因和他的工厂在二战中被摧毁.幸运的是,老布伦博在他死之前研究发现了克莱因的秘密并写下来了.一个克莱因保险箱有两个特点是:一个使用字母而不是数字的组合锁,和一个刻在门上的引用.克莱因的引用总是包含五个和十二个不同的大写字母

快捷键组合

????快捷键组合 Window键 1. 锁屏:按windows键后,再按L键. ` 2.找文件:按Windows键,再按E键,直接打开电脑的资源管理器. 3.返回桌面:按下Windows键和D键.4.图片放大:windows键和+++++++++,放大镜出现! 缩小:windows键和- ???????????? 5.windows自带的录像功能.按下windows键+R,输入psr.exe回车,然后就可以开始记录了. 6.调整显示器亮度.音量大小,打开无线网:按下Windows键+X. 7.