0 0

算法:十个人分组问题5

A、B、C、D、E、F、G、H、I、J 共10名学生有可能参加本次计算机竞赛,也可能不参加。因为某种原因,他们是否参赛受到下列条件的约束:
   1. 如果A参加,B也参加;
   2. 如果C不参加,D也不参加;
   3. A和C中只能有一个人参加;
   4. B和D中有且仅有一个人参加;
   5. D、E、F、G、H 中至少有2人参加;
   6. C和G或者都参加,或者都不参加;
   7. C、E、G、I中至多只能2人参加   
   8. 如果E参加,那么F和G也都参加。
   9. 如果F参加,G、H就不能参加
   10. 如果I、J都不参加,H必须参加
2013年4月17日 14:53

2个答案 按时间排序 按投票排序

2 0

采纳的答案

以前有做过

char[] c = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'};
int[] n = new int[c.length];
for (int i=0, t=i; i<(int)Math.pow(2, c.length); i++, t=i) {
    for (int j=0; j<n.length; j++) {
        n[n.length-j-1] = t%2;
        t >>= 1;
    }
    boolean check = true;
    
    check &= (n[0]==1 ? n[1]==1 : true);            //1
    check &= (n[2]==0 ? n[3]==0 : true);            //2
    check &= (n[0]+n[2] <= 1);                      //3
    check &= (n[1]+n[3] == 1);                      //4
    check &= (n[3]+n[4]+n[5]+n[6]+n[7] >= 2);       //5
    check &= (n[2]==n[6]);                          //6
    check &= (n[2]+n[4]+n[6]+n[8] <= 2);            //7
    check &= (n[4]==1 ? n[5]==1 && n[6]==1 : true); //8
    check &= (n[5]==1 ? n[6]==0 && n[7]==0 : true); //9
    check &= (n[8]==0 && n[9]==0 ? n[7]==1 : true); //10

    if (check) {
        for (int j=0; j<n.length; j++) {
            if (n[j] == 1) {
                System.out.printf("%c ", c[j]);
            }
        }
        System.out.println();
    }
}

2013年4月17日 18:12
0 0

如下是一个类似的问题

10重嵌套循环/可以改成递归

public class HuiYi {
// 1:参加会议:有人邀请A,B,C,D,E,F6个人参加一项会议,这6个人有些奇怪,因为他们有很多要求,已知:
// 1.A,B两人至少有1人参加会议。
// 2.A,E,F3人中有2人参加会议。
// 3.B和C两人一致决定,要么两人都去,要么两人都不去。
// 4.A,D两人中只1人参加会议。
// 5.C,D两人中也只要1人参加会议。
// 6.如果D不去,那么E也决定不去。
// 那么最后究竟有哪几个人参加了会议呢?
public static void main(String[] args) {
for(int a1=1;a1<=2;a1++){
for(int a2=1;a2<=2;a2++){
for(int a3=1;a3<=2;a3++){
for(int a4=1;a4<=2;a4++){
for(int a5=1;a5<=2;a5++){
for(int a6=1;a6<=2;a6++){
if(sum(a1,a2)>=1){
//
}else{
continue;
}
if(sum(a1,a5,a6)==2){
//
}else{
continue;
}
if(sum(a2,a3)==0 || sum(a2,a3)==2){
//
}else{
continue;
}
if(sum(a1,a4)==1){
//
}else{
continue;
}
if(sum(a3,a4)==1){
//
}else{
continue;
}
if(a4==2){
if(a5==2){
//
}else{
continue;
}
}
System.out.println("a1="+a1+",a2="+a2+",a3="+a3+",a4="+a4+",a5="+a5+",a6="+a6);
}
}
}
}
}
}

}
private static int sum(int ...  ps){
int sum = 0 ;
for(int a : ps){
if(a==1){
sum ++;
}
}
return sum;
}
}

2013年4月17日 15:47

相关推荐

    算法赏析:几个经典的算法问题

    【算法赏析:几个经典的算法问题】 在计算机科学中,算法是解决问题的核心工具,它们通过一系列精确的步骤来解决特定的问题。本篇文章将深入探讨五个经典算法:匈牙利算法、八皇后问题、二叉树遍历、希尔排序以及...

    信息学奥赛一本通-教程PPT课件(第五版)算法部分 第六章 贪心算法.pdf

    1. 问题分析:排队接水问题要求安排n个人的接水顺序,使得平均等待时间最小。这个问题可以通过贪心算法求解,关键在于理解平均等待时间是如何计算的。 2. 解题思路:贪心策略可以是,总是优先安排接水时间短的人先接...

    Serpent分组算法标准

    《Serpent分组算法标准》 Serpent算法,以其毒蛇的名称,是一种用于高级加密标准(Advanced Encryption Standard,AES)的竞争提案。由Ross Anderson、Eli Biham和Lars Knudsen三位专家提出,它在设计上强调保守但...

    DES.rar_dex_分组 加密 算法_分组密码_算法_键盘 加密

    数据加密标准(DES,Data Encryption Standard)是一种广泛应用于信息技术领域的对称加密算法,它在...通过理解DES的工作原理,我们可以更好地了解现代加密技术的基础,以及如何通过分组密码和键盘加密来保护个人信息。

    分组粒子群优化算法.pdf

    分组粒子群优化算法(分组PSO算法)是为了解决传统PSO算法中存在的问题而提出的。分组PSO算法通过将粒子群分成若干个小群,并为每个小群设置不同的进化参数,使各小组能够独立进化。在一定的间隔时刻,通过组间变异...

    改进粒子群算法求解TSP问题.

    5. **k-means聚类**:一种无监督学习方法,用于数据分组,本文中用于改进PSO算法中粒子群的动态调整,避免局部最优陷阱。 #### 详细解析: **粒子群优化算法**是一种受生物群体智能启发的全局优化技术,最初由...

    国密算法工具及GB35114文档

    在GB35114-2017标准中,对视频监控数据的加密传输、存储和访问控制进行了详细的规定,旨在防止非法获取和篡改监控信息,保护个人隐私,同时确保系统运行的稳定性和可靠性。此外,标准还涉及了安全策略、风险评估、...

    一种动态分组的粒子群优化算法.pdf

    本文提出了一种动态分组的粒子群优化算法,主要针对传统粒子群优化算法容易陷入局部最优的问题。作者通过研究鸟群的行为模式,引入了“交互粒子”的概念,即在粒子群优化过程中,粒子之间存在更频繁的交互可能性。...

    RSA算法与DES算法的实现

    另一个为公开密钥,可对外公开,甚至可在网络服务器中注册,人们用公钥加密文件发送给个人,个人就可以用私钥解密接受。 RSA 算法基于以下两个事实,这些事实保证了 RSA 算法的安全有效性: 1. 已有确定一个数...

    des算法实验报告

    - **硬件需求**:配备Windows操作系统的个人计算机。 - **软件需求**:安装有VC6.0或更高版本的编译器。 #### 实验原理 ##### 加密与解密过程 在密码学体系中,主要参与者包括发信方、收信方以及攻击者。其核心...

    C# 算法大全 个人总结

    《C# 算法大全 个人总结》 在C#编程中,算法扮演着至关重要的角色,尤其对于提升程序性能和解决复杂问题至关重要。本文将聚焦于C#中的三种基本排序算法:希尔排序(Shell Sort)、插入排序(Insertion Sort)和选择排序...

    C语言数据结构内部排序算法及比较

    本文将深入探讨“C语言数据结构内部排序算法及比较”这一主题,结合个人课程作业的经验,对一些核心概念进行阐述,并对常见的内部排序算法进行比较。 首先,数据结构是组织和管理数据的方式,它包括数组、链表、树...

    AES加密算法(C++实现,附源码)

    AES加密算法,全称为Advanced Encryption Standard,是一种广泛应用的对称加密技术,用于保护数据的机密性。在C++环境中实现AES加密算法,通常涉及到的关键概念包括密钥、明文、密文、加密过程和解密过程。源码中...

    15个梨分给5个人的组合算法

    把15个梨分给5个人,每人最少2个,最多5个的组合算法,返回一个数组 - (NSArray *)createRandomArrayForCount:(NSInteger)aCount min:(NSInteger)aMin max:(NSInteger)aMax people:(NSInteger)aPeople

    1班最后一次算法-个人复习版.doc

    文档资料“1班最后一次算法-个人复习版.doc”主要涵盖了算法和计算过程的基础知识,以及一些具体算法的设计和分析。以下是这些知识点的详细说明: 1. **基本运算**:基本运算是在解决特定问题时最核心的运算,通常...

    AlgoDataStrucProject:算法和数据结构分组项目的存储库

    1. 算法:算法是解决问题的步骤和方法,它是计算机科学的灵魂。高效的算法可以显著提高程序运行速度,降低资源消耗。常见的算法包括排序(如快速排序、归并排序)、搜索(如二分查找、广度优先搜索)以及图算法(如...

    线性分组码及其矩阵表示-个人笔记.pdf

    在个人笔记中,可能会介绍线性分组码的基本原理、构造方法、以及它的矩阵表示等重要知识点。 线性分组码的基本原理: 1. 信息向量与码字:信息源输出的信息经过分组后,会变成长度为k的信息向量。将这个信息向量左...

    图像加密算法与实践:基于C#语言实现_孙燮华著

    在数字化时代,图像数据的保护变得至关重要,特别是在医疗、军事、金融和个人隐私等领域。 本书首先介绍了图像加密的基本概念,包括加密的目的、加密与解密的过程以及加密算法的分类。读者将了解到,图像加密不仅仅...

    大数据中的算法与结构

    2. **聚类算法**:如K-means算法,用于对数据进行分类和分组,有助于发现数据之间的内在关联。 3. **推荐系统算法**:如协同过滤算法,能够根据用户的历史行为和其他用户的相似行为来预测用户可能感兴趣的内容。 4. ...

Global site tag (gtag.js) - Google Analytics