1. 商家商品销售量统计
现在有一个网站上半年的商品销售量,请你写一段代码帮助店主统计前半年的总销量和平均销量。
商品销售表
1月份 2月份 3月份 4月份 5月份 6月份 总销量 平均销量
64 53 77 59 61 42 0 0
(1)函数中应定义一个包含8个元素的一维数据,用来存放6个月的商品销量和统计后的总销量及平均销量;
(2)完成6个月销量的输入;
(3)计算半年的总销量及平均销量;
(4)按照程序运行效果图,输出商品销量表。
出处:
https://edu.csdn.net/practice/23387034
代码:
#include<stdio.h> int main() { int a[8],s=0; printf("----------商家商品销售统计----------\n"); printf("\n"); printf("请输入商品6个月的销售量:"); for (int i = 0; i < 6; i++) { scanf("%d", &a[i]); s += a[i]; } printf("\n\t\t\t商品销量表\t\t\t\n"); printf("—————————————————————————————————\n"); for (int i = 1; i <= 8; i++) { if (i <= 6) printf(" %d月份 ", i); else if (i == 7) printf(" 总销售 "); else printf("平均销售\n"); } for (int i = 0; i < 8; i++) { if (i < 6) printf(" %d |", a[i]); else if (i == 6) { a[i] = s; printf(" %d |", a[i]); } else { a[i] = s / 6; printf(" %d |",a[i]); } } return 0; }
输入输出:
----------商家商品销售统计----------
请输入商品6个月的销售量:64 53 77 59 61 42
商品销量表
—————————————————————————————————
1月份 2月份 3月份 4月份 5月份 6月份 总销售 平均销售
64 | 53 | 77 | 59 | 61 | 42 | 356 | 59 |
2. 乘积最大子数组
给你一个整数数组 nums
,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。
示例 1:
输入: [2,3,-2,4]
输出: 6
解释: 子数组 [2,3] 有最大乘积 6。
示例 2:
输入: [-2,0,-1]
输出: 0
解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。
出处:
https://edu.csdn.net/practice/23387032
代码:
#include <bits/stdc++.h> using namespace std; class Solution { public: int maxProduct(vector<int> &nums) { int ans = -10000000; int n = nums.size(); int max1 = 1, min1 = 1, mx, mn; for (int i = 0; i < n; i++) { mx = max1; mn = min1; max1 = max(mx * nums[i], max(nums[i], mn * nums[i])); min1 = min(mn * nums[i], min(nums[i], mx * nums[i])); ans = max(max1, ans); } return ans; } }; int main() { Solution s; vector<int> nums = {2,3,-2,4}; cout << s.maxProduct(nums) << endl; nums = {-2,0,-1}; cout << s.maxProduct(nums) << endl; return 0; }
输入输出:
6
0
3. 滑动窗口最大值
给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。
返回滑动窗口中的最大值。
示例 1:
输入:nums = [1,3,-1,-3,5,3,6,7], k = 3
输出:[3,3,5,5,6,7]
解释:
滑动窗口的位置 最大值
--------------- -----
[1 3 -1] -3 5 3 6 7 3
1 [3 -1 -3] 5 3 6 7 3
1 3 [-1 -3 5] 3 6 7 5
1 3 -1 [-3 5 3] 6 7 5
1 3 -1 -3 [5 3 6] 7 6
1 3 -1 -3 5 [3 6 7] 7
示例 2:
输入:nums = [1], k = 1
输出:[1]
示例 3:
输入:nums = [1,-1], k = 1
输出:[1,-1]
示例 4:
输入:nums = [9,11], k = 2
输出:[11]
示例 5:
输入:nums = [4,-2], k = 2
输出:[4]
提示:
1 <= nums.length <= 10^5
-10^4 <= nums[i] <= 10^4
1 <= k <= nums.length
出处:
https://edu.csdn.net/practice/23387033
代码:
#include <bits/stdc++.h> using namespace std; class Solution { public: vector<int> maxSlidingWindow(vector<int> &nums, int k) { vector<int> ans; int n = nums.size(); if (n == 0 || k > n) return ans; deque<int> que; for (int i = 0; i < n; i++) { if (!que.empty()) { if (i >= que.front() + k) que.pop_front(); while (!que.empty() && nums[i] >= nums[que.back()]) que.pop_back(); } que.push_back(i); if (i + 1 >= k) ans.push_back(nums[que.front()]); } return ans; } }; string vectorToString(vector<int> vect) { stringstream ss; ss << "["; for (int i = 0; i < vect.size(); i++) { ss << to_string(vect[i]); ss << (i < vect.size() - 1 ? "," : "]"); } return ss.str(); } int main() { Solution s; vector<int> nums = {1,3,-1,-3,5,3,6,7}; cout << vectorToString(s.maxSlidingWindow(nums, 3)) << endl; return 0; }
输入输出:
[3,3,5,5,6,7]