|
发表于 2023-10-30 14:40:15
|
显示全部楼层
这段代码的逻辑上是有问题的。在循环中,我们将所有可能的i+j+k的结果都存储在向量a中,然后对a进行排序。接下来,我们遍历向量a,并将每个元素的计数存储在数组b中。最后,我们在数组b中查找最大值并输出。
然而,这段代码有两个问题:
1. 我们没有初始化变量max的值。在for循环之前,我们应该将max初始化为一个较小的值,例如INT_MIN。
2. 在第二个for循环中,我们应该使用小于等于号(<=)而不是小于号(<)来判断循环的终止条件。因为数组b的元素可能为0,所以当b[ i]为0时,循环应该终止。
下面是修改后的代码:
- #include <bits/stdc++.h>
- using namespace std;
- const int N = 50;
- vector<int> a;
- int b[N];
- int main()
- {
- int s1, s2, s3;
- cin >> s1 >> s2 >> s3;
- memset(b, 0, sizeof(b));
- for (int i = 1; i <= s1; i++)
- {
- for (int j = 1; j <= s2; j++)
- {
- for (int k = 1; k <= s3; k++)
- {
- a.push_back(i + j + k);
- }
- }
- }
- sort(a.begin(), a.end());
- for (auto i : a)
- {
- b[ i]++;
- }
- int max = INT_MIN;
- for (int i = 0; b[ i] <= 0; i++)
- {
- if (max < b[ i])
- max = b[ i];
- }
- cout << max << endl;
- }
复制代码
通过这些修改,代码应该能够正确地计算并输出最大值了。 |
|