王國慶 发表于 2024-12-27 10:13:03

【蓝桥杯逐日一题】与或异或——DFS

与或异或

   蓝桥杯逐日一题 2024-12-26 与或异或 DFS
题目描述

   小蓝有一张门电路的逻辑图,如下图所示: 图中每个三角形代表着一种门电路,大概是与门、或门、异或门中的任何一种,它担当上一层中的两个圆形中的数据作为输入,产生一个输出值输出到 下一级 (如图中箭头所示)。图中圆形表示的是暂存的输出结果,取值只大概是 0 或 1,为了便于表示我们用                                       a                            r                            r                            [                            i                            ]                            [                            j                            ]                                  arr                     arr 表示第                                       i                            (                            0                            ≤                            i                            ≤                            4                            )                                  i(0\leq i\leq 4)                     i(0≤i≤4) 行第                                       j                            (                            0                            ≤                            j                            ≤                            i                            )                                  j(0\leq j\leq i)                     j(0≤j≤i) 个圆形的值。此中                                       a                            r                            r                            [                            0                            ]                            =                            (                            I                            n                            [                            0                            ]                            ,                            I                            n                            [                            1                            ]                            ,                            I                            n                            [                            2                            ]                            ,                            I                            n                            [                            3                            ]                            ,                            I                            n                            [                            4                            ]                            )                                  arr=(In,In,In,In,In)                     arr=(In,In,In,In,In) 表示的是输入数据,对于某个                                       a                            r                            r                            [                            i                            ]                            [                            j                            ]                            (                            i                            ≥                            0                            )                                  arr(i\geq 0)                     arr(i≥0),计算方式为                                       a                            r                            r                            [                            i                            ]                            [                            j                            ]                            =                            a                            r                            r                            [                            i                            −                            1                            ]                            [                            j                            ]                                                         o                            p                                                         a                            r                            r                            [                            i                            −                            1                            ]                            [                            j                            +                            1                            ]                                  arr=arr \ op \ arr                     arr=arr op arr,此中                                       o                            p                                  op                     op 表示的是将                                       a                            r                            r                            [                            i                            −                            1                            ]                            [                            j                            ]                                  arr                     arr、                                        a                            r                            r                            [                            i                            −                            1                            ]                            [                            j                            +                            1                            ]                                  arr                     arr 作为输入,将                                       a                            r                            r                            [                            i                            ]                            [                            j                            ]                                  arr                     arr 作为输出的那个门电路,与门、或门、异或门分别对应于按位与 &、按位或                                       (                            ∣                            )                                  (|)                     (∣) 、按位异或(^)运算符。 如今已知输入为                                       I                            n                            [                            0                            ]                            =                            1                            ,                            I                            n                            [                            1                            ]                            =                            0                            ,                            I                            n                            [                            2                            ]                            =                            1                            ,                            I                            n                            [                            3                            ]                            =                            0                            ,                            I                            n                            [                            4                            ]                            =                            1                                  In=1,In=0,In=1,In=0,In=1                     In=1,In=0,In=1,In=0,In=1,小蓝想要使得最终的输出                                       O                            u                            t                                  Out                     Out 的值为 1,叨教一共有多少种差别的门电路组合方式?此中上图中表现的就是一种合法的方式。
解题思绪

   那这道题就是通过遍历来找出所能够满意条件的方法,首先详细怎么遍历,就是先通过每一遍历运算符的操作,然而每遍历一次操作,就要判定是否要换行,是否要结束递归,更新到下一个操作之后就有要进行操作符的遍历。
Accepted

#include <iostream>
using namespace std;
int res = 0;
int arr= {{1,0,1,0,1}};
void dfs(int r,int c,int k) {
    if(k == 1) {
      arr = arr | arr;
    }
    if(k == 2) {
      arr = arr ^ arr;
    }
    if(k == 3) {
      arr = arr & arr;
    }

    // 判断结束条件
    if(r == 4 && c == 0) {
      if(arr == 1) {
            res ++;
      }
      return ;
    }

    // 当前行结束
    if(r + c == 4) {
      r++;
      c = 0;
    } else c++;

    for(int i = 1;i <= 3;i++) {
      dfs(r,c,i);
    }
}

int main()
{
    int op = {1,2,3};
   
    for(int k = 1;k <= 3;k++){
      dfs(1,0,k);
    }
    cout<<res<<endl;
    return 0;
}


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 【蓝桥杯逐日一题】与或异或——DFS