首页 > 其他分享 >打卡5.8——委派认为问题

打卡5.8——委派认为问题

时间:2023-05-14 19:24:18浏览次数:45  
标签:委派 穷举法 5.8 int && 条件 打卡 表达式

1.问题描述

某项任务需要在A、B、C、D、E、F这6个人中挑选人来完成,但挑选人受限于以下的条件:
(1) A和B两个人至少去一人;
(2) A和D不能同时去;
(3) A、E和F三人中要挑选两个人去;
(4) B和C同时去或者都不去;
(5) C和D两人中只能去一个;
(6) 如果D不去,那么E也不去。

试编程求出应该让哪几个人去完成这项任务。
2.问题分析

把六个条件转换成表达式,假设参加任务为1,不参加为0,那么这几个条件分别是

A+B>=1

A+D!=2

A+E+F==2

B+C==0||B+C=2

C+D==1

D+E==0||D++1

3.算法设计

穷举法算出所有的情况,然后用逻辑表达式作为判断条件,如果符合,输出结果

if (A + B >= 1 && A + D != 2 && A + E + F == 2 && (B + C == 0 || B + C == 2) && C + D == 1 && (D + E == 1 || D == 1))

输出结果会用到三目运算符,表达式格式为:<表达式1> ? <表达式2> : <表达式3>;

(1)计算表达式1的值;

(2) 若表达式1的值为真(或非0),则只计算表达式2,将其结果作为整个表达式的值;

          若表达式1的值为假(或为0),则只计算表达式3,将其结果作为整个表达式的值。

就是这样

cout << "A " << (A ? "" : "不") << "去。" << endl;

4.完整程序

复制代码
#include<iostream>
using namespace std;
int main()
{
    int A, B, C, D, E, F;//下面是穷举法,穷举出所有可能的情况
    for (A = 0; A <= 1; A++)
    {
        for (B = 0; B <= 1; B++)
        {
            for (C = 0; C <= 1; C++)
            {
                for (D = 0; D <= 1; D++)
                {
                    for (E = 0; E <= 1; E++)
                    {
                        for (F = 0; F <= 1; F++)
                        {
                            if (A + B >= 1 && A + D != 2 && A + E + F == 2 && (B + C == 0 || B + C == 2) && C + D == 1 && (D + E == 1 || D == 1))//判断条件
                            {
                                cout << "A " << (A ? "" : "不") << "去。" << endl;
                                cout << "B " << (B ? "" : "不") << "去。" << endl;
                                cout << "C " << (C ? "" : "不") << "去。" << endl;
                                cout << "D " << (D ? "" : "不") << "去。" << endl;
                                cout << "E " << (E ? "" : "不") << "去。" << endl;
                                cout << "F " << (F ? "" : "不") << "去。" << endl;
                            }
                        }
                    }
                }
            }
        }
    }
    return 0;
}

标签:委派,穷举法,5.8,int,&&,条件,打卡,表达式
From: https://www.cnblogs.com/genyuan0/p/17399920.html

相关文章

  • 打卡5.6——求车速
    问题描述:一辆以固定速度行驶的汽车,司机在上午10点看到里程表上的读数是一个对称数(即这个数从左向右读和从右向左读是完全一样的),为95859。两小时后里程表上出现了一个新的对称数,该数仍为五位数。问该车的速度是多少?新的对称数是多少?问题分析:对称数是95859,两小时后出现新的,这个数......
  • 打卡5.7——三色球问题
    1.问题描述一个口袋中放有12个球,已知其中3个是红的,3个是白的,6个是黑的,现从中任取8个,问共有多少种可能的颜色搭配?2.问题分析假设八个球,红球a个,白球b个,黑球c个,那么c=8-a-b个。而且a<=3,b<=3,也就是说8-a-b<=63.算法设计穷举法用两个for循环,第一个for控制红球的数量,第二个控制白......
  • 打卡5.5
    1.问题描述警察审问4名窃贼嫌疑犯。现在已知,这4人当中仅有一名是窃贼,还知道这4个人中的每个人要么是诚实的,要么总是说谎。这四个人回答如下甲:乙没有偷,是丁偷的乙:我没有偷,是丙偷的丙:甲没有偷,是乙偷的丁:我没有偷请根据这四个人的回答判断谁是窃贼2.问题分析四个人里面有一......
  • 第23天打卡
    问题:打印出所有256以下的回文数;流程图: 直接暴力枚举即可源代码:#include<stdio.h>intmain(){intm[16],n,i,t,count=0;longunsigneda,k;for(n=1;n<256;n++){k=0;t=1;a=n*n;for(i=0;a!=0;i++){m[i]=a%10;a/=10;}for(;i>0;i--){k+=m[i-1]*t;t*=10;}if(k......
  • 打卡第二十三天
    要求编写一个简单计算器程序,可根据输入的运算符,对2个整数进行加、减、乘、除或求余运算。题目保证输入和输出均不超过整型范围。一、1.运用if语句,将每种运算都写出来二、三、#include<stdio.h>intmain(){inta,b;charc;scanf("%d%c%d",&a,&c,&b);if(c=='+')printf("......
  • 第五章 输入输出系统 5.8 磁盘存储器的性能和调度
    一、磁盘性能简述  1.数据组织和格式物理地址形式:磁道号(柱面号)——磁头号——扇区信息记录在磁道上,多个盘片,正反两面都用来记录信息,每面一个磁头磁道从外缘,以“0”开始编号,往里面递增。所有盘面中处于同一磁道号上的所有磁道组成一个柱面每个扇区大小为600字节(数据512字......
  • c++打卡第二十六天
    ①一、问题描述 二、设计思路①、我们可以定义long类型数,算出这个数的平方。②、我们可以判断这个数的位数,然后对平方数除余(数本身位数+1),得到一个余数,判断是否与自身数相等。③、如果相等就打印出来。三、流程图四、代码实现#include<iostream>#include<cmath>using......
  • 第22天打卡
    问题: 源代码:#include<stdio.h>intmain(){longmul,number,k,a,b;for(number=0;number<100000;number++){for(mul=number,k=1;(mul/=10)>0;k*=10);a=k*10;mul=0;b=10;while(k>0){mul=(mul+(number%(k*10))*(number%b-number%(b/10)))%a;k/=10;b*......
  • 每日打卡-22.2
    一.问题描述使用宽输入流从一个有中文字符的文本文件中读入所有字符,统计每个字符出现的次数,将统计结果用宽输出流输出到另一个文本文件中。二.设计思路三.流程图四.伪代码 1五.代码实现 #include<iostream>#include<fstream>#include<string>#include<locale.h>......
  • 每日打卡-22.1
    一.问题描述编写程序实现如下功能:打开指定的一个文本文件,在每一行前加行号后将其输出到另一个文本文件中二.设计思路三.流程图四.伪代码 1五.代码实现 1#include<iostream>#include<fstream>#include<cstdlib>#include<iomanip>//函数setw()输出格式控制usingname......