当前位置: 首页 > article >正文

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

与或异或

蓝桥杯每日一题 2024-12-26 与或异或 DFS

题目描述

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

解题思路

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

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

    // 判断结束条件
    if(r == 4 && c == 0) {
        if(arr[r][c] == 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[3] = {1,2,3};
    
    for(int k = 1;k <= 3;k++){
      dfs(1,0,k);
    }
    cout<<res<<endl;
    return 0;
}


http://www.kler.cn/a/456908.html

相关文章:

  • pandas删除值全部为0的整行和整列,还有0.0,0.000000也要删除
  • ARM64 Windows 10 IoT工控主板运行x86程序效率测试
  • VuePress搭建个人博客
  • 《代码随想录》Day20打卡!
  • ESP-IDF学习记录(4) ESP-IDF examples目录
  • LVS 负载均衡原理 | 配置示例
  • 【Docker命令】如何使用 `docker cp` 命令拷贝容器文件到宿主机
  • Dify智能体进阶:Selenium截取动图
  • Git完整使用经历
  • 0基础带你python入门:pyQT + OpenCV相关练习
  • 调试文件系统(DebugFS )
  • Flutter 实现全局悬浮按钮学习
  • 微信小程序页面传参长度问题
  • Blender真实灰尘粒子动画资产预设 Dust Particles Pro V1.2
  • JVM常用参数
  • 《易经》在 Java 编程中的应用
  • Flutter 异步编程简述
  • 卷积神经网络(CNN)模型 CIFAR-10 数据集 例子
  • 学习,指针和FLASH
  • 02-18.python入门基础一基础算法
  • [江科大STM32] 第五集STM32工程模板——笔记
  • rk356x 下 qt 程序 hdmi不显示鼠标图标
  • 数值分析雨课堂章节测试
  • Java重要面试名词整理(十一):网络编程
  • 渗透测试常用术语总结
  • 深入了解JSON-LD:语义化网络数据的桥梁