每天一道C语言编程(6):委派任务

news2024/9/22 23:23:19

题目描述

某侦察队接到一项紧急任务,要求在A、B、C、D、E、F六个队员中尽可能多地挑若干人,但有以下限制条件:
1)A和B两人中至少去一人;
2)A和D不能一起去;
3)A、E和F三人中要派两人去;
4)B和C都去或都不去;
5)C和D两人中去一个;
6)若D不去,则E也不去。
问应当让哪几个人去?

输出格式

要派出的人
若有多个,按字母递增顺序排列,用逗号分开(含末尾逗号)

样例输出

A,B,C,F,

思路

根据以下条件,可列出表格:
1A和B两人中至少去一人;
2A和D不能一起去;
3A、E和F三人中要派两人去;
4B和C都去或都不去;
5C和D两人中去一个;
6若D不去,则E也不去。

条件一条件二条件三条件四条件五条件六
A去B不去A去D不去AE去F不去BC都去C去D不去DE都不去
A不去B去A不去D去AF去E不去BC都不去C不去D去DE都去
AB都去AD都不去EF去A不去D去E不去

容易得出A,B,C之间的关系为:

1.A去,B,C都不去

2.A不去,B,,C都去

3.A,B,C都去

if(状态1||状态2||状态3){
    //其他限制条件,继续筛选
}

这样一来,本来6个人,每人两种状态有2的6次方:64种状态,现在变为

以或(||)为连接,A,B,C三人每人有两种状态,2^3+2^3+2^3,即3*2^3=24种

现在只有2,3,5,6四种限制了,即:

if(条件二&&条件三&&条件五&&条件六){
    if(是最优解){
        输出此时状态为去的人
    }
}

代码显示

1. 声明一个数组a[10],用a[0]的值来表示人员A的状态——若a[0]为‘0’代表A不去,a[0]为‘1’代表A去;
同理a[1]代表B的状态、a[2]代表C、a[3]代表D、a[4]代表E、a[6]代表F;
初始化数组a[10]中的元素全为0,即所有人的状态均为不去

数组a[0]a[1]a[2]a[3]a[4]a[5]
人员ABCDEF
状态000000

ABC状态为3种:

数组a[0]a[1]a[2]
人员ABC
状态1100
状态2011
状态3111

 状态一:a[0]+a[1]+a[2]=1,状态二:a[0]+a[1]+a[2]=2,状态三:a[0]+a[1]+a[2]=3

for(i=1;i<4;i++){
    if(i==1){
        //A、B、C的值为状态1时的值1、0、0
        a[0]=1;
        a[1]=0;//由于初始化数组元素全为0,这里a[1]和a[2]的赋值也可以省去
        a[2]=0;
    }
    if(i==2){
        //A、B、C的值为状态2时的值0、1、1
    }
    if(i==3){
        //A、B、C的值为状态3时的值1、1、1
    }
    //其他限制条件
}

现在只需要对D,E,F的两种状态进行遍历:

for(i=1;i<4;i++){
    if(i==1){
        //A、B、C的值为状态1时的值1、0、0
        a[0]=1;
        a[1]=0;//由于初始化数组元素全为0,这里a[1]和a[2]的赋值也可以省去
        a[2]=0;
    }
    if(i==2){
        a[0]=0;
        a[1]=1;
        a[2]=1;
    }
    if(i==3){
        a[0]=1;
        a[1]=1;
        a[2]=1;
    }
    for(a[3]=0;a[3]<2;a[3]++){//D的两种状态
        for(a[4]=0;a[4]<2;a[4]++){//E的两种状态
            for(a[5]=0;a[5]<2;a[5]++){//F的两种状态
                if(条件2&&条件3&&条件5&&条件6){
                    if(最优解){
                        //输出即可
                    }
                }
            }
        }
    }
}

得到24种状态分别为:

#include<stdio.h>
int main(void){
    int a[10]={0};
    int b[10]={0};
    int i,j;
    int mark=1;
    for(i=1;i<4;i++){//根据第一个和第四个条件可得,A、B、C的可能组合有三种 
        if(i==1){
            a[0] = 1;
        }else if(i==2){
            a[0] = 0;
            a[1] = 1;
            a[2] = 1;
        }else{
            a[0] = 1;
            a[1] = 1;
            a[2] = 1;
        }
        for(a[3]=0;a[3]<2;a[3]++){
            for(a[4]=0;a[4]<2;a[4]++){
                for(a[5]=0;a[5]<2;a[5]++){
                    printf("第%2d种:",mark);
                    for(j=0;j<6;j++){
                        printf("%d ",a[j]);
                    }
                    mark++;
                    printf("\n");
                 } 
              }
          }
      }
return 0;
}
   

得: 

 接下来是限制条件二,三,五,六:

条件二条件三条件五条件六
A去D不去AE去F不去C去D不去DE都不去
A不去D去AF去E不去C不去D去DE都去
AD都不去EF去A不去D去E不去

条件二:((a[0]==1&&a[3]==0)||(a[0]==0&&a[3]==1)||(a[0]==0&&a[3]==0))
条件三:((a[0]==1&&a[4]==1&&a[5]==0)||(a[0]==1&&a[4]==0&&a[5]==1)||(a[0]==0&&a[4]==1&&a[5]==1))
条件五:((a[2]==1&&a[3]==0)||(a[2]==0&&a[3]==1))
条件六:((a[3]==0&&a[4]==0)||(a[3]==1&&a[4]==0)||(a[3]==1&&a[4]==1)))

 在比较哪一种条件下sum最多:

//求得最优解
for(j=0;j<6;j++){
    sum1 += a[j];
}
if(sum1>sum2){//筛选人数最多的解 
    sum2 = sum1;
    for(j=0;j<6;j++){
        b[j] = a[j];
    }
}

最后得到代码为:
 

#include<stdio.h>
int main(void){
    int a[10]={0};
    int b[10]={0};
    int i,j,sum1,sum2;
    sum1=sum2=0;
    //int mark=1;
    for(i=1;i<4;i++){//根据第一个和第四个条件可得,A、B、C的可能组合有三种 
        if(i==1){
            a[0] = 1;
        }else if(i==2){
            a[0] = 0;
            a[1] = 1;
            a[2] = 1;
        }else{
            a[0] = 1;
            a[1] = 1;
            a[2] = 1;
        }
        for(a[3]=0;a[3]<2;a[3]++){
            for(a[4]=0;a[4]<2;a[4]++){
                for(a[5]=0;a[5]<2;a[5]++){
                    /*
                    printf("第%2d种:",mark);
                    for(j=0;j<6;j++){
                        printf("%d ",a[j]);
                    }
                    mark++;
                    printf("\n"); 
                    */
                    if(((a[0]==1&&a[3]==0)||(a[0]==0&&a[3]==1)||(a[0]==0&&a[3]==0))&&
                    ((a[0]==1&&a[4]==1&&a[5]==0)||(a[0]==1&&a[4]==0&&a[5]==1)||(a[0]==0&&a[4]==1&&a[5]==1))&&
                    ((a[2]==1&&a[3]==0)||(a[2]==0&&a[3]==1))&&
                    ((a[3]==0&&a[4]==0)||(a[3]==1&&a[4]==0)||(a[3]==1&&a[4]==1))){
                        for(j=0;j<6;j++){
                            sum1 += a[j];
                        }
                        if(sum1>sum2){//筛选人数最多的解 
                            sum2 = sum1;
                            //printf("符合条件的组合:"); 
                            for(j=0;j<6;j++){
                                b[j] = a[j];
                                //printf("%d ",b[j]);
                            }
                            //printf("\n");
                        }
                    }
                }
            }
        }
    }
    if(b[0]==1){
        printf("A,");
    }
    if(b[1]==1){
        printf("B,");
    }
    if(b[2]==1){
        printf("C,");
    }
    if(b[3]==1){
        printf("D,");
    }
    if(b[4]==1){
        printf("E,");
    }
    if(b[5]==1){
        printf("F,");
    }
    return 0;
}

最后可得到正确的输出啦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/759151.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用CatBoost和SHAP进行多分类完整代码示例

CatBoost是顶尖的机器学习模型之一。凭借其梯度增强技术以及内置函数&#xff0c;可以在不做太多工作的情况下生成一些非常好的模型。SHAP (SHapley Additive exPlanation)是旨在解释具有独特视觉效果和性能价值的机器学习模型的输出。CatBoost和SHAP结合在一起构成了一个强大的…

《动手学深度学习》(pytorch版本)中`d2lzh_pytorch`包问题

《动手学深度学习》&#xff08;pytorch版本&#xff09;中d2lzh_pytorch包问题

vue3-03 todo-新增任务

步骤&#xff1a; todoStorage.js&#xff1a;定义获取任务列表的方法、将任务存储到localStorage的方法、后续需要用到的获取随机id的方法。useTodoList.js&#xff1a;用一个响应式变量todosRef接收任务列表的数据&#xff1b;使用watchEffect方法将新增的任务保存到localSt…

2023/7/16周报

摘要 论文阅读 1、题目和现有问题 2、工作流程 3、图神经网络模块 4、注意力网络 5、实验结果和分析 深度学习 1、GNN和GRU的融合 2、相关公式推导 总结 摘要 本周在论文阅读上&#xff0c;对基于图神经网络和改进自注意网络的会话推荐的论文进行了学习&#xff0c;…

i.MX6ULL(十六) linux 设备驱动

一 简介 Linux设备驱动是指驱动Linux内核与硬件设备进行通信的软件模块。设备驱动通常分为两类&#xff1a;字符设备驱动和块设备驱动。 设备驱动的主要功能包括&#xff1a; 设备初始化&#xff1a;在系统启动时&#xff0c;设备驱动需要初始化相应的硬件设备&#xff0c;设…

人工智能、机器学习、自然语言处理、深度学习等有啥本质的区别?

大众媒体赋予这些术语的含义通常与机器学习科学家和工程师的理解有所出入。因此&#xff0c;当我们使用这些术语时&#xff0c;给出准确的定义很重要&#xff0c;其关系韦恩图如图1.2所示。 图1.2 自然语言处理、人工智能、机器学习和深度学习等术语的关系韦恩图 1 人工智能 …

企业使用CRM后的三大提升

数字化转型是企业发展的重要决策&#xff0c;为此&#xff0c;很多企业使用CRM客户管理系统管理客户数据、优化业务流程&#xff0c;直面数字化浪潮。那么&#xff0c;使用CRM系统后&#xff0c;企业会有哪些变化呢&#xff1f; 一、提升客户体验 使用CRM系统后&#xff0c;企…

第二周周报

PCA PCA 是一种流行的统计技术&#xff0c;用于识别数据集中最重要的特征或模式并将其转换为较低维的表示形式。本报告将涵盖PCA的基本原理、其优点。 步骤 主成分分析是一种数学技术&#xff0c;可降低数据集的维数&#xff0c;同时保留尽可能多的信息。它通过查找主成分来…

Redis集群(Cluster和Codis)

1.为什么使用集群&#xff1f; 当我们遇到一个大数据量存储情况时&#xff0c;有两种解决方案&#xff1a; 纵向扩容&#xff1a;升级单个redis实例的配置&#xff0c;包括增加内存容量、磁盘容量&#xff0c;以及使用更高的cpu配置。 纵向扩容&#xff1a;简单直接。也存在一些…

98英寸带来加倍沉浸享受,三星Q80Z新品呈现大有不同的精彩

作者 | 曾响铃 文 | 响铃说 在过去几年&#xff0c;家电行业可以说是负重前行。在经历2022年整年寒冬后&#xff0c;2023年的彩电市场能否迎来一场翻身仗&#xff1f;这是年初被业内讨论最多的话题。 目前2023年已经过半&#xff0c;据奥维云网数据显示&#xff0c;2023年一…

InsCode Stable Diffusion 美图活动一期——即刻体验!来自 CSDN 的 SD 模型

文章目录 &#x1f525;关于活动&#x1f4cb;前言&#x1f3af;什么是 Stable Diffusion&#x1f9e9;Stable Diffusion 与其他 AI 艺术生成器有什么区别&#xff1f; &#x1f3af;开始体验 InsCode Stable Diffusion&#x1f3af;试用 SD 模型生成优质人物好图&#x1f9e9;…

内存池是什么原理?|内存池简易模拟实现|为学习高并发内存池tcmalloc做准备

前言 那么这里博主先安利一些干货满满的专栏了&#xff01; 这两个都是博主在学习Linux操作系统过程中的记录&#xff0c;希望对大家的学习有帮助&#xff01; 操作系统Operating Syshttps://blog.csdn.net/yu_cblog/category_12165502.html?spm1001.2014.3001.5482Linux S…

在Linux系统中如何搭建Apache服务

在Linux系统中如何搭建Apache服务 Apache服务是一种开源的、跨平台的Web服务器软件&#xff0c;它的作用是提供网页内容给用户的Web浏览器。具体来说&#xff0c;Apache服务有以下几个主要的作用&#xff1a; 1.Web服务器&#xff1a;Apache是一款功能强大且广泛使用的Web服务…

54、Mysql索引的数据结构,各自优劣

Mysql索引的数据结构&#xff0c;各自优劣 索引的数据结构和具体存储引擎的实现有关在MySQL中使用较多的索引有Hash索引&#xff0c;B树索引等InnoDB存储引擎的默认索引实现为: B树索引。对于哈希索引来说&#xff0c;底层的数据结构就是哈希表&#xff0c;因此在绝大多数需求…

C++编程(三)—— C++11

文章目录 绑定器和函数对象函数对象绑定器lambda表达式 关键词与语法autonullptr右值引用 智能指针容器set和mapunordered_set和unordered_map数组链表 语言级别支持的多线程编程thread子线程如何结束主线程如何处理子线程线程间的互斥线程的同步通信机制&#xff08;条件变量&…

Windows Cluster 分布式算法

在分布式系统中&#xff0c;都需要解决分布式一致性问题。那么&#xff0c;在Windows 集群中&#xff0c;使用了什么算法来保证集群的一致性呢——Paxos。Windows Server 故障转移集群 (WSFC) 使用 Paxos 算法在整个系统中同步更改。通过记录 Paxos Tag 值并保留历史记录&#…

连锁门店如何搭建B2B2C多用户商城系统?

现在很多的线下店铺都开始慢慢的转型线上了&#xff0c;想线上线下相结合&#xff0c;但是最近很多的商家都在问什么样的B2B2C商城系统开发适合线下店铺呢?这个问题今天加速度jsudo小编给大家一起整理如下&#xff0c;相信商家看完后就知道如何选择一款合适的商城系统了。 一、…

【C语言】求序列前N项和

问题描述 输入一个正整数n&#xff0c;输出2/13/25/38/5…的前n项之和&#xff08;该序列从第2项起&#xff0c;每一项的分子是前一项分子与分母的和&#xff0c;分母是前一项的分子&#xff09;&#xff0c;保留2位小数。试编写相应程序。 代码实现 #include<stdio.h>…

spring-14优化性能

原始Junit测试Spring的问题 这里的&#xff1a;第一行代码获得应用上下文对象&#xff0c;第二行代码获得你那个对象 2、原先测试找junit&#xff0c;现在测试找spring&#xff0c;然后再找&#xff0c;junit&#xff0c;告诉我配置文件是什么&#xff0c;然后注入测试对象&am…

LeetCode 172.阶乘后的零

基础方法就是暴力解&#xff0c;其次是数学归纳。 具体思路如下&#xff1a;&#xff08;copy大佬的&#xff09; 耐心看完&#xff01; 代码如下&#xff1a; #include <iostream> #include <vector> #include <cmath> #include <algorithm> #incl…