C/C++每日一练(20230425) 成绩分布、汇总区间、矩阵置零

简介: C/C++每日一练(20230425) 成绩分布、汇总区间、矩阵置零

1. 成绩分布

原标题:统计某一单科成绩各分数段的分布人数

设某班有若干人,写一程序统计某一单科成绩各分数段的分布人数,每人的成绩随机输入,输入负数表示输入结束。

要求按下面的格式输出统计结果(“”表示实际分布人数) 0~39 40~49 50~59 …… 90~100 **

出处:

https://edu.csdn.net/practice/26466618

代码:

#include <string>
#include <iostream>
using namespace std;
int main()
{
    int result[12] = {0};
    int gold;
    while (cin>>gold) {
        if (gold < 0) {
            break;
        }
        int code = gold / 10;
        if (code < 4) {
            result[3] ++;
        }
        else if(code == 10) {
            result[9] ++;
        }
        else {
            result[code] ++;
        }
    }
    string word[] = {"0~39",
      "40~49",
      "50~59",
      "60~69",
      "70~79",
      "80~89",
      "90~100"};
    for (int i=0; i<7; i++) {
        cout<<word[i]<<" "<<result[i+3]<<endl;
    }
    return 0;
}

输出:


2. 汇总区间

给定一个无重复元素的有序整数数组 nums

返回 恰好覆盖数组中所有数字最小有序 区间范围列表。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x

列表中的每个区间范围 [a,b] 应该按如下格式输出:

  • "a->b" ,如果 a != b
  • "a" ,如果 a == b

示例 1:

输入:nums = [0,1,2,4,5,7]

输出:["0->2","4->5","7"]

解释:区间范围是:

[0,2] --> "0->2"

[4,5] --> "4->5"

[7,7] --> "7"


示例 2:

输入:nums = [0,2,3,4,6,8,9]

输出:["0","2->4","6","8->9"]

解释:区间范围是:

[0,0] --> "0"

[2,4] --> "2->4"

[6,6] --> "6"

[8,9] --> "8->9"


示例 3:

输入:nums = []

输出:[]


示例 4:

输入:nums = [-1]

输出:["-1"]


示例 5:

输入:nums = [0]

输出:["0"]


提示:

  • 0 <= nums.length <= 20
  • -2^31 <= nums[i] <= 2^31 - 1
  • nums 中的所有值都 互不相同
  • nums 按升序排列

出处:

https://edu.csdn.net/practice/26466619

代码:

#include <bits/stdc++.h>
using namespace std;
class Solution
{
public:
    vector<string> summaryRanges(vector<int> &nums)
    {
        int n = nums.size();
        vector<string> ans;
        int i = 0;
        while (i < n)
        {
            int j = i;
            while (j + 1 < n && nums[j + 1] == nums[j] + 1)
                j++;
            if (i == j)
                ans.push_back(to_string(nums[i]));
            else
                ans.push_back(to_string(nums[i]) + "->" + to_string(nums[j]));
            i = j + 1;
        }
        return ans;
    }
};
string vectorToString(vector<string> vect) {
    stringstream ss;
  ss << "[";
    for (size_t i = 0; i < vect.size(); i++)
        ss << vect[i] << (i < vect.size() - 1 ? "," : "");
    ss << "]";
    return ss.str();
}
int main() {
  Solution s;
    vector<int> nums = {0,1,2,4,5,7};  
    cout << vectorToString(s.summaryRanges(nums)) << endl;
    nums = {0,2,3,4,6,8,9};  
    cout << vectorToString(s.summaryRanges(nums)) << endl;
    return 0;  
}

输出:

[0->2,4->5,7]

[0,2->4,6,8->9]


3. 矩阵置零

给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法

进阶:

  • 一个直观的解决方案是使用  O(mn) 的额外空间,但这并不是一个好的解决方案。
  • 一个简单的改进方案是使用 O(m+n) 的额外空间,但这仍然不是最好的解决方案。
  • 你能想出一个仅使用常量空间的解决方案吗?

示例 1:

输入:matrix = [[1,1,1],[1,0,1],[1,1,1]]

输出:[[1,0,1],[0,0,0],[1,0,1]]


示例 2:

输入:matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]]

输出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]]


提示:

  • m == matrix.length
  • n == matrix[0].length
  • 1 <= m, n <= 200
  • -2^31 <= matrix[i][j] <= 2^31 - 1

以下程序实现了这一功能,请你填补空白处内容:

```c++
#include 
using namespace std;
class Solution
{
public:
    void setZeroes(vector> &matrix)
    {
        int i = matrix.size();
        int j = matrix[0].size();
        vector hang(i);
        vector lie(j);
        for (int m = 0; m < i; m++)
        {
            for (int n = 0; n < j; n++)
            {
                if (!matrix[m][n])
                {
                    hang[m] = lie[n] = true;
                }
            }
        }
        for (int m = 0; m < i; m++)
        {
            for (int n = 0; n < j; n++)
            {
                __________________;
            }
        }
    }
};
```

出处:

https://edu.csdn.net/practice/26466620

代码:

#include <bits/stdc++.h>
using namespace std;
class Solution
{
public:
    void setZeroes(vector<vector<int>> &matrix)
    {
        int i = matrix.size();
        int j = matrix[0].size();
        vector<int> hang(i);
        vector<int> lie(j);
        for (int m = 0; m < i; m++)
        {
            for (int n = 0; n < j; n++)
            {
                if (!matrix[m][n])
                {
                    hang[m] = lie[n] = true;
                }
            }
        }
        for (int m = 0; m < i; m++)
        {
            for (int n = 0; n < j; n++)
            {
                if (hang[m] || lie[n])
                  matrix[m][n] = 0;
            }
        }
    }
};
string vectorToString(vector<int> vect) {
    stringstream ss;
  ss << "[";
    for (size_t i = 0; i < vect.size(); i++)
        ss << vect[i] << (i < vect.size() - 1 ? "," : "");
    ss << "]";
    return ss.str();
}
string vector2DToString(vector<vector<int>> vect) {
    string res = "[";
    size_t len = vect.size();
    for (size_t i = 0; i < len; i++)
  {
        res += vectorToString(vect[i]);
        if (i+1 != len)
          res += ",";
    }
    res += "]";
    return res;
}
int main() {
  Solution s;
    vector<vector<int>> matrix = {{1,1,1},{1,0,1},{1,1,1}};
    s.setZeroes(matrix);
    cout << vector2DToString(matrix) << endl;
    matrix = {{0,1,2,0},{3,4,5,2},{1,3,1,5}};
    s.setZeroes(matrix);
    cout << vector2DToString(matrix) << endl;
    return 0;  
}

输出:

[[1,0,1],[0,0,0],[1,0,1]]

[[0,0,0,0],[0,4,5,0],[0,3,1,0]]


🌟 每日一练刷题专栏 🌟

持续,努力奋斗做强刷题搬运工!

👍 点赞,你的认可是我坚持的动力!

🌟 收藏,你的青睐是我努力的方向!

评论,你的意见是我进步的财富!  

主页:https://hannyang.blog.csdn.net/


目录
相关文章
|
4天前
|
Python
探索Python中的列表推导式
【10月更文挑战第38天】本文深入探讨了Python中强大而简洁的编程工具——列表推导式。从基础使用到高级技巧,我们将一步步揭示如何利用这个特性来简化代码、提高效率。你将了解到,列表推导式不仅仅是编码的快捷方式,它还能帮助我们以更加Pythonic的方式思考问题。准备好让你的Python代码变得更加优雅和高效了吗?让我们开始吧!
WK
|
23天前
|
Python
python元组与列表的转换
在 Python 中,元组(tuple)和列表(list)是两种常用的数据结构,它们之间可以相互转换
WK
28 9
|
22天前
|
Python
探索Python中的列表推导式
【10月更文挑战第20天】在编程世界里,时间就是一切。Python的列表推导式是节约时间、简化代码的一大利器。本文将带你深入理解并有效利用这一强大工具,从基础到高级用法,让你的代码更加简洁高效。
|
22天前
|
Python
SciPy 教程 之 SciPy 模块列表 6
SciPy教程之常量模块介绍:涵盖公制、二进制(字节)、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率及力学单位。示例展示了角度单位转换为弧度的几个常用常量。
18 7
|
22天前
|
Python
SciPy 教程 之 SciPy 模块列表 7
`scipy.constants` 模块提供了常用的时间单位转换为秒数的功能。例如,`constants.hour` 返回 3600.0 秒,表示一小时的秒数。其他常用时间单位包括分钟、天、周、年和儒略年。
17 6
|
19天前
|
Python
SciPy 教程 之 SciPy 模块列表 13
SciPy教程之SciPy模块列表13:单位类型。常量模块包含多种单位,如公制、二进制(字节)、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例代码展示了如何使用`constants`模块获取零摄氏度对应的开尔文值(273.15)和华氏度与摄氏度的转换系数(0.5556)。
17 1
|
20天前
|
弹性计算 安全 数据处理
Python高手秘籍:列表推导式与Lambda函数的高效应用
列表推导式和Lambda函数是Python中强大的工具。列表推导式允许在一行代码中生成新列表,而Lambda函数则是用于简单操作的匿名函数。通过示例展示了如何使用这些工具进行数据处理和功能实现,包括生成偶数平方、展平二维列表、按长度排序单词等。这些工具在Python编程中具有高度的灵活性和实用性。
|
21天前
|
Python
SciPy 教程 之 SciPy 模块列表 9
SciPy教程之常量模块介绍,涵盖多种单位类型,如公制、质量、角度、时间、长度、压强等。示例展示了如何使用`scipy.constants`模块查询不同压强单位对应的帕斯卡值,包括atm、bar、torr、mmHg和psi。
13 1
|
21天前
|
Python
SciPy 教程 之 SciPy 模块列表 8
SciPy教程之常量模块单位类型介绍。该模块包含多种单位,如公制、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例展示了部分长度单位的转换值,例如英寸、英尺、海里等。
14 1
|
21天前
|
C语言 开发者 Python
探索Python中的列表推导式:简洁而强大的工具
【10月更文挑战第21天】在Python的世界里,代码的优雅与效率同样重要。列表推导式(List Comprehensions)作为一种强大而简洁的工具,允许开发者通过一行代码完成对列表的复杂操作。本文将深入探讨列表推导式的使用方法、性能考量以及它如何提升代码的可读性和效率。