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

总结4..

 #include <stdio.h>

// 定义全局变量n,用于表示二维数组的大小

// 定义二维数组b,用于标记找到单词的位置,初始化为0

int n, b[200][200] = {0};

// 定义二维数组d,存储8个方向的偏移量,用于在二维数组中搜索单词

// 分别表示右、右下、下、右、左、左上、左下、右上8个方向

int d[8][2] = { {0, 1}, {1, 1}, {0, -1}, {1, 0}, {-1, 0}, {-1, -1}, {1, -1}, {-1, 1}};

// 定义二维字符数组a,用于存储输入的字符矩阵

char a[200][200];

// 定义字符数组c,存储要查找的单词"yizhong"

char c[10] = "yizhong";

 

// 定义函数p,用于在以(x, y)为起点的8个方向上搜索单词"yizhong"

// x, y 表示搜索的起始位置的坐标

void p(int x, int y) {

    // 遍历8个方向

    for (int k = 0; k < 8; k++) {

        // 初始化标志变量z为1,表示当前方向可能找到单词

        // 初始化临时变量x1和y1,初始值为起始坐标x和y

        int z = 1, x1 = x, y1 = y;

        // 从单词的第2个字符开始匹配,因为第1个字符已经在调用p函数时匹配过

        for (int i = 1; i < 7; i++) {

            // 根据当前方向的偏移量更新坐标

            x1 += d[k][0];

            y1 += d[k][1];

            // 判断新坐标是否越界,或者对应位置的字符与单词中相应位置的字符不匹配

            if (x1 < 0 || x1 >= n || y1 < 0 || y1 >= n || (x1 >= 0 && x1 < n && y1 >= 0 && y1 < n && a[x1][y1]!= c[i])) {

                // 如果不满足条件,将标志变量z设为0,表示当前方向找不到单词

                z = 0;

                // 跳出内层循环

                break;

            }

        }

        // 如果在当前方向找到了完整的单词

        if (z) {

            // 标记起始位置

            b[x][y] = 1;

            // 重置临时坐标为起始坐标

            x1 = x;

            y1 = y;

            // 标记单词经过的所有位置

            for (int i = 1; i < 7; i++) {

                x1 += d[k][0];

                y1 += d[k][1];

                b[x1][y1] = 1;

            }

        }

    }

}

 

int main() {

    // 输入二维数组的大小n

    scanf("%d", &n);

    // 输入二维字符数组a的内容

    for (int i = 0; i < n; i++) {

        scanf("%s", a[i]);

    }

    // 遍历二维字符数组a的每个元素

    for (int i = 0; i < n; i++) {

        for (int j = 0; j < n; j++) {

            // 如果当前元素为'y',调用p函数进行单词搜索

            if (a[i][j] == 'y') p(i, j);

        }

    }

    // 输出标记后的结果,找到单词的位置输出原字符,否则输出'*'

    for (int i = 0; i < n; i++) {

        for (int j = 0; j < n; j++) {

            if (b[i][j]) printf("%c", a[i][j]);

            else printf("*");

        }

        printf("\n");

    }

    return 0;

}

 #include <stdio.h>

// 全局变量声明

// n 表示数组 a 的元素个数

// l 和 r 分别表示区间的左边界和右边界

// a 数组用于存储输入的整数序列

// b 数组用于辅助(这里未完全体现其作用,代码中未对其进行有效使用),初始化为 0

// cnt 用于统计满足条件的组合数量,初始化为 0

int n, l, r, a[103], b[103] = {0}, cnt = 0;

 

// 深度优先搜索函数

// x 表示当前处理到数组 a 的第 x 个元素

// s 表示当前已选择元素的和

void dfs(int x, int s) {

    // 如果已经处理完数组 a 的所有元素

    if (x == n + 1) {

        // 如果当前已选择元素的和 s 在区间 [l, r] 内

        if (s >= l && s <= r) {

            // 满足条件的组合数量加 1

            cnt++;

        }

        // 结束当前递归分支

        return;

    }

    // 如果选择当前元素 x 后,和 s 加上 a[x] 仍不超过右边界 r

    if (s + a[x] <= r) {

        // 递归处理下一个元素,并且加上当前元素 a[x] 的值

        dfs(x + 1, s + a[x]);

    }

    // 递归处理下一个元素,不选择当前元素 a[x]

    dfs(x + 1, s);

}

 

int main() {

    // 输入数组元素个数 n,区间左边界 l,区间右边界 r

    scanf("%d %d %d", &n, &l, &r);

    // 输入数组 a 的各个元素

    for (int i = 1; i <= n; i++) {

        scanf("%d", &a[i]);

    }

    // 从数组的第一个元素开始进行深度优先搜索,初始和为 0

    dfs(1, 0);

    // 输出满足条件的组合数量

    printf("%d\n", cnt);

    return 0;

}

学了一点树相关的基础知识,刷了几道洛谷上的题,对于字符串加搜索的这种类型的题目,熟练度不够

 


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

相关文章:

  • 蚁群算法 (Ant Colony Optimization) 算法详解及案例分析
  • 接上篇基于Alertmanager 配置钉钉告警
  • 电路研究9.1.1——合宙 Air780EP 模组外围线路
  • 【网络协议】【http】【https】TLS解决了HTTP存在的问题-加密通信+摘要,数字签名+CA证书
  • 【面试总结】FFN(前馈神经网络)在Transformer模型中先升维再降维的原因
  • 从对等通信到万维网:通信模型变迁与拥塞求解
  • vim的介绍
  • Harmony Next 支持创建分身
  • HMV Challenges 022 Writeup
  • web前端5--css字体样式
  • 从浏览器层面看前端性能:了解 Chrome 组件、多进程与多线程
  • uniapp,编译运行报错“Error: listen EACCES: permission denied 0.0.0.0:5173“,解决方法
  • 微服务拆分
  • Linux终端之旅: 权限管理三剑客与特殊权限
  • 【玩转全栈】---基于YOLO8的图片、视频目标检测
  • 【算法笔记】力扣热题100(LeetCode hot-100)53. 最大子数组和 1.前缀和 2.动态规划
  • Kubernetes 网络插件断网恢复性能比较
  • Spring Boot中如何自定义属性配置
  • CSS 网络安全字体
  • MySQL——主从同步
  • BERT的中文问答系统69
  • w-form-select.vue(自定义下拉框组件)(与后端字段直接相关性)
  • flask实现重启后需要重新输入用户名而避免浏览器使用之前已经记录的用户名
  • Objective-C语言的安全开发
  • web3py+flask+ganache的智能合约教育平台
  • TCP全连接队列