C语言学习--练习4(二维数组)

news2024/9/29 1:16:12

目录

1.统计有序数组中的负数

2.矩阵对角线元素和

3.最富有客户的资产总量

4.托普利兹矩阵

5.矩阵中的幸运数

6.二进制矩阵中的特殊位置

7.岛屿的周长


1.统计有序数组中的负数

//直接遍历二维数组即可
int countNegatives(int** grid, int gridSize, int* gridColSize) {
    //int* gridColSize表示每行元素的个数
    int m=gridSize;
    int n=gridColSize[0];
    int ans=0;
    for(int i=0;i<m;i++){
        for(int j=0;j<n;j++){
            if(grid[i][j]<0){
                ans++;
            }
    }
    }//of for
    return ans;
}

2.矩阵对角线元素和

int diagonalSum(int** mat, int matSize, int* matColSize){
    int ans=0;
    if(matSize%2){//奇数
        for(int i=0,j=matSize-1;i<matSize&&j>-1;i++,j--){
            ans=ans+mat[i][i]+mat[i][j];
        }
        ans=ans-mat[matSize/2][matSize/2];
    }else{
        for(int i=0,j=matSize-1;i<matSize&&j>-1;i++,j--){
            ans=ans+mat[i][i]+mat[i][j];
        }

    }
    return ans;
}
/*
int diagonalSum(int** mat, int matSize, int* matColSize){
    int n = matSize;
    int ans = 0;
    for(int i =0;i<n;i++)
        for(int j =0;j<n;j++)
        {
            if(i==j||i+j==n-1)
                ans+=mat[i][j];
        }
        return ans;
}
*/

3.最富有客户的资产总量

//就是求每行之和的最大值
int maximumWealth(int** accounts, int accountsSize, int* accountsColSize) {
    int max=0,ans=0;
    for(int i=0;i<accountsSize;i++){
        ans=0;
        for(int j=0;j<accountsColSize[0];j++){
            ans=accounts[i][j]+ans;
        }
        if(ans>max){
            max=ans;
        }
    }//of for
    return max;
}

4.托普利兹矩阵

//解题思路:1.遍历第一行:matrix[1][i]==matrix[]
bool isToeplitzMatrix(int** matrix, int matrixSize, int* matrixColSize) {
    int m=matrixSize;
    int n=matrixColSize[0];
    //数组越界的情况
    for(int i=0;i<m-1;i++){
        for(int j=0;j<n-1;j++){
            if(matrix[i][j]!=matrix[i+1][j+1]){
                return false;
            }
    }
    }
    return true;
}

5.矩阵中的幸运数

//思路:直接找到每一行的最小值,然后看看是不是所在列的最大值不就可以了
int* luckyNumbers (int** matrix, int matrixSize, int* matrixColSize, int* returnSize){
    int m=matrixSize;
    int n=matrixColSize[0];
    int *a=(int *)malloc(sizeof(int)*m);
    int ans=0;
    int lie=0;
    for(int i=0;i<m;i++){
        int min=99999;
        int hh=1;
        for(int j=0;j<n;j++){
            if(matrix[i][j]<min){
                min=matrix[i][j];
                lie=j;
            }
        }//of for找到每行的最小值
        for(int j=0,i=0;j<m;j++){
            if(matrix[j][lie]>min){
                hh=0;
            }
        }
        if(hh!=0){
            a[ans++]=min;
        }
    }
    * returnSize=ans;
    return a;
}

6.二进制矩阵中的特殊位置



int numSpecial(int** mat, int matSize, int* matColSize){
    int m=matSize;
    int n=matColSize[0];
    int ans=0;
    for(int i=0;i<m;i++){
        for(int j=0;j<n;j++){
            if(mat[i][j]==1){
                int hh=1;
                for(int k=0;k<n;k++){
                    if(k!=j&&mat[i][k]!=0){
                        hh=0;
                    }  
                }//判断第i行是否都为0
                for(int k=0;k<m;k++){
                    if(k!=i&&mat[k][j]!=0){
                        hh=0;
                    }
            }//判断第j列是否都为0
            if(hh){
                ans++;
            }
        }//of if
    }
    }
    return ans;
}

7.岛屿的周长

/*
遍历两次数组,第一次一行一行地遍历,第二次一列一列地遍历。
每当出现第一个陆地的时候,边长加 2 ,之后连着的陆地都不再加边长,直到出现海洋。
出现海洋之后,如果再次出现陆地,边长就再次加 2 。

这种解法其实是将陆地的边长分为了横着的边长和竖着的边长。
一横条陆地只贡献 2 个竖着的边长;一竖条陆地只贡献 2 个横着的边长。

*/
int islandPerimeter(int** grid, int gridSize, int* gridColSize) {
    int ret = 0;
    for (int i = 0; i < gridSize; i++) {
        int flag = 0;//默认0为陆地
        for (int j = 0; j < gridColSize[0]; j++) {
            if (!flag && grid[i][j]) {
                flag = 1;
                ret += 2;
            }
            else if (flag && !grid[i][j]) 
                flag = 0;
        }
    }
    for (int j = 0; j < gridColSize[0]; j++) {
        int flag = 0;
        for (int i = 0; i < gridSize; i++) {
            if (!flag && grid[i][j]) {
                flag = 1;
                ret += 2;
            }
            else if (flag && !grid[i][j]) 
                flag = 0;
        }
    }
    return ret;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1506593.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

20240310-2-数组(Array)

数组&#xff08;Array&#xff09; 面试中最常见的就是围绕数组进行出题&#xff0c;主要原则数组可以随机读取&#xff0c;一般遇到数组相关的题目&#xff0c;都不是直观看到的那样。第一步暴力解法&#xff0c;第二步是否可以排序&#xff0c;是否可以二分&#xff0c;是否…

【Linux】线程封装_互斥

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;折纸花满衣 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;【LeetCode】winter vacation training 目录 &#x1f449;&#x1f3fb;线程封装Thread.cpp &#x1f449;&am…

给 spyter/all-spark-notebook 添加scala支持

spyter/all-spark-notebook默认没有安装scala notebook&#xff0c;需要手动添加。 你可以创建一个新的 Dockerfile&#xff0c;在其中添加你需要的配置和组件。以下是一个简单的例子&#xff1a; FROM jupyter/all-spark-notebook:x86_64-ubuntu-22.04 #冒号后可以是latest&a…

Masked Generative Distillation(MGD)2022年ECCV

Masked Generative Distillation&#xff08;MGD&#xff09;2022年ECCV 摘要 **目前的蒸馏算法通常通过模仿老师的输出来提高学生的表现。本文表明&#xff0c;教师还可以通过引导学生特征恢复来提高学生的代表性。从这个角度来看&#xff0c;我们提出的掩模生成蒸馏&#x…

扩展学习|系统理解数字经济

文献来源&#xff1a;[1]肖静华,胡杨颂,吴瑶.成长品&#xff1a;数据驱动的企业与用户互动创新案例研究[J].管理世界,2020,36(03):183-205.DOI:10.19744/j.cnki.11-1235/f.2020.0041. [2]陈晓红,李杨扬,宋丽洁等.数字经济理论体系与研究展望[J].管理世界,2022,38(02):208-22413…

微信小程序跳转到其他小程序

有两种方式&#xff0c;如下&#xff1a; 一、appid跳转 wx.navigateToMiniProgram({appId: 目标小程序appid,path: 目标小程序页面路径,//不配的话默认是首页//develop开发版&#xff1b;trial体验版&#xff1b;release正式版envVersion: release, success(res) {// 打开成功…

yudao-cloud 学习笔记

前端代码 浏览器打开 https://cloud.iocoder.cn/intro/ F12 执行代码 var aaa $(".sidebar-group-items").find("a"); var ll[]; var tt[]; for(var i0;i<aaa.length;i ){ ll.push("https://doc.iocoder.cn" $(aaa[i]).attr("href&quo…

电动车窗开关中MOS管的应用解析

随着科技的不断发展&#xff0c;电动车窗系统已经成为现代汽车中不可或缺的一部分。而MOS&#xff08;金属氧化物半导体&#xff09;管的应用&#xff0c;为电动车窗开关注入了新的活力&#xff0c;极大地提高了其使用寿命和安全性。 一、MOS的优越性能 MOS管以其卓越的开关…

记录西门子:IO隔离SCL编程

在PLC变量中创建IO输入输出 在PLC类型中创建输入和输出&#xff0c;并将PLC变量的输入输出名称复制过来 创建一个FC块或者FB块 创建一个DB块 MAIN主程序中&#xff1a;

【JavaEE初阶系列】——计算机是如何工作的

目录 &#x1f388;冯诺依曼体系 ❗外存和内存的概念 ❗CPU中央处理器—人类当今科技领域巅峰之作之一 &#x1f6a9;如何衡量cpu &#x1f6a9;指令&#xff08;Instruction&#xff09; &#x1f388;操作系统&#xff08;Operating System&#xff09; &#x1f388;…

超越基础:提升你的数据采集策略与IP代理的高级应用

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

软件测试 需求

文章目录 1. 需求1.1 什么是需求1.2 为什么要有需求1.3 测试人员眼中的需求1.4 如何深入理解需求 2. 测试用例的概念2.1 什么是测试用例2.2 为什么要有测试用例 3. 软件错误&#xff08;BUG&#xff09;的概念4. 开发模型和测试模型4.1 软件的生命周期4.2 瀑布模型&#xff08;…

[SAP] ABAP注释快捷键修改

在使用ABAP编辑器的时候&#xff0c;原有的添加代码注释和取消代码注释的快捷键未生效&#xff0c;这时我们可以考虑对注释快捷键进行修改 在事务码SE38(ABAP编辑器)屏幕右下角&#xff0c;点击【Options选项】图标 在【键盘】|【命令】输入栏中输入"comment"关键字…

mac上更改vscode快捷键

以移动当前行代码为例 mac上的vscode&#xff0c;默认移动当前行代码的快捷键是⌥↑即option↑按键 现在我想改成command↑ 步骤如下 1.打开vscode-code-首选项-键盘快捷键 2.打开快捷键列表 3.输入move line&#xff0c;找到要改动的这个快捷键 当前行-右键-更改键绑定&…

LTspice(14) Noise仿真

LTspice(14) Noise仿真 好久没有更新LTspice的教程了&#xff0c;大家想了没&#xff1f; 截止目前LTspice已经更新到24.0.9。界面发生了一些变化&#xff0c;但主要功能并不受影响&#xff0c;新的版本改了UI&#xff0c;找东西更加方便了&#xff0c;界面如下图1所示。 图1…

JavaEE+springboot教学仪器设备管理系统o9b00-springmvc

本文旨在设计一款基于Java技术的教学仪器设备销售网站&#xff0c;以提高网站性能、功能完善、用户体验等方面的优势&#xff0c;解决现有教学仪器设备销售网站的问题&#xff0c;并为广大教育工作者和学生提供便捷的教学仪器设备销售渠道。本文首先介绍了Java技术的相关基础知…

checking file system on C

1、win7系统 开机检查C盘&#xff0c;虽然可以ESC取消检查&#xff0c;每次操作很麻烦&#xff0c;且没有意思 2、注册表清空BootExecute数值数据 1&#xff09;打开注册表 WinR &#xff08;快捷键&#xff09;输入“regedit”&#xff0c;回车 2&#xff09;位置HKEY_LOCAL…

怎么在运行框执行脚本和软件?

1.新建一个文件夹&#xff08;随便命名&#xff09; 2.右击此电脑点击属性 3.点击高级系统设置 4.点击环境变量 5.选中Path,点击编辑 6.点击编辑&#xff0c;粘贴你刚刚文件夹的地址 7.所有窗口全部点击确定 8.你可以把常用的软件快捷方式复制到文件夹里&#xff08;比如微…

QT画图功能

QT画图功能 每个QWidget都自带的功能&#xff0c;继承了QPainteDevice都可以使用QPainter来进行绘图。 画图需要调用paintEvent绘制事件&#xff0c;paintEvent事件时QWidget类自带的事件。 重写paintEvent事件。&#xff08;重写事件&#xff1a;如果父类有某个方法&#xff…

协程库项目—协程类模块

ucontext_t结构体、非对称协程 协程类 ucontext_t结构体 头文件中定义的四个函数&#xff08;getcontext(), setcontext(), makecontext(), swapcontext()&#xff09;和两个结构类型&#xff08;mcontext_t, ucontext_t&#xff09;在一个进程中实现用户级的线程切换。 其中…