首页 > 其他分享 >打卡5.5

打卡5.5

时间:2023-05-14 19:00:19浏览次数:37  
标签:5.5 int 窃贼 成立 四个 打卡

1.问题描述

警察审问4名窃贼嫌疑犯。现在已知,这4人当中仅有一名是窃贼,还知道这4个人中的每个人要么是诚实的,要么总是说谎。

这四个人回答如下

甲:乙没有偷,是丁偷的

乙:我没有偷,是丙偷的

丙:甲没有偷,是乙偷的

丁:我没有偷

请根据这四个人的回答判断谁是窃贼

2.问题分析

四个人里面有一个窃贼,丁说自己没有偷,这个不能看出什么来,只能从前三个人入手。用ABCD分别代表四个人,变量值为1代表这个人是窃贼,根据题可以列出条件

B+D=1

B+C=1

A+B=1

A+B+C+D=1//这个丁说的话什么也看不出来,只知道四个人有一个是窃贼

3.算法设计

要三个表达式同时成立,也就是说B+D==1&&B+C==1&&A+B==1

如果A是窃贼,那么A=1,B=C=D=0,然后带入上面的表达式,如果成立就不用测试了

假如不成立,就假设B是窃贼,就是A=C=D=0,B=1,如果成立,B就是窃贼,如果不成立就假设C为窃贼........一直试下去

4.程序

复制代码
#include<iostream>
using namespace std;
int main()
{
    int i, A = 1, B = 0, C = 0, D = 0;//这里先假设A是窃贼
    for (i = 1; i <= 4; i++)
        if (B + D == 1 && B + C == 1 && A + B == 1)//判断符合条件的,如果符合就是窃贼
            break;
        else
        {
            if (i == 1)//第一次就试出来了,甲不是窃贼,判断乙是不是
            {
                A = 0; B = 1;
            }
            if (i == 2)//这里甲乙都不是,测试丙是不是
            {
                B = 0; C = 1;
            }
            if (i == 3)//甲乙丙都不是,测试丁是不是
            {
                C = 0; D = 1;
            }
        }
    if (i == 1)
        cout << "甲" << endl;
    if (i == 2)
        cout << "乙" << endl;
    if (i == 3)
        cout << "丙" << endl;
    if (i == 4)
    {
        cout << "丁" << endl;
    }
    return 0;
}

标签:5.5,int,窃贼,成立,四个,打卡
From: https://www.cnblogs.com/genyuan0/p/17399900.html

相关文章

  • 第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("......
  • 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......
  • 打卡第二十二天
    求出100~200之间的全部素数,每行输出8个数,每个数宽度为5列一、1.运用for循环语句进行除于判断是否为零二、三、#include<stdio.h>intmain(void){ inti,k,m=0; intflag; for(i=100;i<200;i++){ flag=1; for(k=2;k<i&&flag==1;k++){ if(i%......
  • 每日打卡
    高数次方的末位数问题描述:求13的13次方的后三位数问题分析:可以较为简单的看出后三位只与被除数的后三位有关系,因此可以写一个循环代码:#include<stdio.h> intmain() {   inti,x,y,last=1;     printf("输入x和y:\n");    scanf("%d,%d,&x,&y");   ......
  • 建民打卡日记5.12
    一、问题描述每个PAT考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位。正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试时考生需要换到考试座位就座。但有些考生迟到了,试机已经结束,他们只能拿着领到的试机......
  • 打卡13
    /***Definitionforsingly-linkedlist.*publicclassListNode{*intval;*ListNodenext;*ListNode(intx){val=x;}*}*/classSolution{publicListNodemerge(ListNodel1,ListNodel2){ListNodedummy=newListN......