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