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/


目录
相关文章
|
11天前
|
索引 Python
如何使用Python的Pandas库进行数据合并和拼接?
Pandas的`merge()`函数用于数据合并,如示例所示,根据&#39;key&#39;列对两个DataFrame执行内连接。`concat()`函数用于数据拼接,沿轴0(行)拼接两个DataFrame,并忽略原索引。
32 2
|
2天前
|
数据挖掘 数据处理 Python
【亮剑】如何在 Python 中以表格格式打印列表?
【4月更文挑战第30天】本文介绍了Python中以表格格式打印列表的三种方法:1) 使用字符串格式化,适用于简单场景;2) 使用prettytable库,适合需要更多格式化选项的情况;3) 使用pandas库,适用于处理大量数据和复杂分析。根据需求选择合适的方法来展示数据。
|
4天前
|
索引 Python
python【列表】增删改查
python【列表】增删改查
|
4天前
|
Python
Python中字典和集合(二)
Python中字典和集合(二)
|
4天前
|
存储 算法 索引
Python中字典和集合(一)
Python中字典和集合(一)
|
4天前
|
存储 缓存 Python
【Python21天学习挑战赛】字典 && 小数据池
【Python21天学习挑战赛】字典 && 小数据池
|
6天前
|
存储 JSON 数据处理
|
6天前
|
存储 缓存 人工智能
bidict,一个超酷的 Python 双向字典库!
bidict,一个超酷的 Python 双向字典库!
12 1
|
6天前
|
存储 人工智能 索引
Python中的嵌套字典访问与操作详解
Python中的嵌套字典访问与操作详解
15 1
|
7天前
|
JSON 数据可视化 定位技术
python_将包含汉字的字典数据写入json(将datav的全省数据中的贵州区域数据取出来)
python_将包含汉字的字典数据写入json(将datav的全省数据中的贵州区域数据取出来)
15 0