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:

a9dfa884d1a855d6630087aa890a20f8.jpeg


输入: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 <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++)
            {
                __________________;
            }
        }
    }
};




出处:

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]]





目录
相关文章
|
2月前
|
Linux 监控 Ubuntu
Linux 终端操作命令(1)
Linux 终端操作命令(1)
71 1
Linux 终端操作命令(1)
|
2月前
|
算法 Java Go
Rust每日一练(Leetday0018) N皇后II、最大子数组和、螺旋矩阵
Rust每日一练(Leetday0018) N皇后II、最大子数组和、螺旋矩阵
30 1
Rust每日一练(Leetday0018) N皇后II、最大子数组和、螺旋矩阵
|
2月前
|
Linux 监控 Shell
Linux 终端命令之文件浏览(4) head, tail
Linux 终端命令之文件浏览(4) head, tail
35 0
Linux 终端命令之文件浏览(4) head, tail
|
2月前
|
Shell Linux 机器学习/深度学习
Linux 终端操作命令(3)内部命令用法
Linux 终端操作命令(3)内部命令用法
53 0
Linux 终端操作命令(3)内部命令用法
|
2月前
|
Python Linux Ubuntu
Linux系统部署Python语言开发运行环境
Linux系统部署Python语言开发运行环境
127 0
Linux系统部署Python语言开发运行环境
|
2月前
|
Go Unix 开发者
Go语言time库,时间和日期相关的操作方法
Go语言time库,时间和日期相关的操作方法
66 0
Go语言time库,时间和日期相关的操作方法
|
2月前
|
C++ 存储 Serverless
力扣C++|一题多解之数学题专场(2)
力扣C++|一题多解之数学题专场(2)
33 0
力扣C++|一题多解之数学题专场(2)
|
2月前
|
Go 机器学习/深度学习 Rust
Golang每日一练(leetDay0119) 反转字符串I\II Reverse String
Golang每日一练(leetDay0119) 反转字符串I\II Reverse String
53 0
Golang每日一练(leetDay0119) 反转字符串I\II Reverse String
|
2月前
|
Java Go C++
Golang每日一练(leetDay0115) 重新安排行程、递增的三元子序列
Golang每日一练(leetDay0115) 重新安排行程、递增的三元子序列
41 0
Golang每日一练(leetDay0115) 重新安排行程、递增的三元子序列
|
2月前
|
Java Go C++
Golang每日一练(leetDay0111) 摆动排序II\I Wiggle Sort
Golang每日一练(leetDay0111) 摆动排序II\I Wiggle Sort
32 0
Golang每日一练(leetDay0111) 摆动排序II\I Wiggle Sort