尝试获取数组中的最大元素时出现巨大的随机数错误 - C++ 错误
Getting huge random numbers error while trying to get the maximum element in array - C++ error
我正在制作一个程序,其中
该程序将 3 个数字作为输入:“l”、“r”和“a”。
我得到了 l 和 r 之间的所有“x”值(包括 l 和 r)。
例如,l = 1,r = 3,x 值为 1、2、3。所以现在我有一个函数 f(n) = ((x/a) + (x % a)),(注意: [x/a] 向下舍入为整数)。所以我用 C++ 实现了这个,我的代码如下。
#include<iostream>
using namespace std;
int main()
{
int l;
int r;
int a;
cin>>l>>r>>a;
int nums[(r-l)+2];
int answers[(r-l)+2];
for (int i = 1; i < (r-l)+2; i++)
{
nums[i] = i;
}
for (int i = 1; i < sizeof(nums)/sizeof(nums[0])-1; i++)
{
answers[i] = ((nums[i]/a) + (nums[i] % a));
}
int j = 0;
j = answers[0];
for (int i = 0; i < sizeof(answers); i++)
{
if (j < answers[i])
{
j = answers[i];
}
}
cout<<j;
}
但每当我 运行 这段代码时,我都会得到巨大的随机数,如 230984084 和 all.So 请指出我的代码有什么问题。提前致谢。
Levi 请求 post 我的评论作为答复:
关键是 C++ 的成功之一是它从 C 开始,但它向前发展了很多,你问题中的代码仍然主要是 C-code。这是一个如何在 C++ 中处理它的示例,需要更多知识但出错的机会更少:
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
#include <numeric>
int main()
{
std::cout << "Give 'left', 'right' and 'process' values: \n";
int l, r, a;
std::cin >> l >> r >> a;
std::vector<int> nums((r-l)+2);
std::vector<int> answers;
// fill container with ascending numbers
std::iota(nums.begin(), nums.end(), 1);
// transform as needed
std::transform(nums.begin(), nums.end(), std::back_inserter(answers), [a](int i) { return i/a + i%a; });
// find maximum element in container (returns iterator to element)
auto maxv = std::max_element(answers.begin(), answers.end());
std::cout << *maxv;
}
我正在制作一个程序,其中 该程序将 3 个数字作为输入:“l”、“r”和“a”。 我得到了 l 和 r 之间的所有“x”值(包括 l 和 r)。 例如,l = 1,r = 3,x 值为 1、2、3。所以现在我有一个函数 f(n) = ((x/a) + (x % a)),(注意: [x/a] 向下舍入为整数)。所以我用 C++ 实现了这个,我的代码如下。
#include<iostream>
using namespace std;
int main()
{
int l;
int r;
int a;
cin>>l>>r>>a;
int nums[(r-l)+2];
int answers[(r-l)+2];
for (int i = 1; i < (r-l)+2; i++)
{
nums[i] = i;
}
for (int i = 1; i < sizeof(nums)/sizeof(nums[0])-1; i++)
{
answers[i] = ((nums[i]/a) + (nums[i] % a));
}
int j = 0;
j = answers[0];
for (int i = 0; i < sizeof(answers); i++)
{
if (j < answers[i])
{
j = answers[i];
}
}
cout<<j;
}
但每当我 运行 这段代码时,我都会得到巨大的随机数,如 230984084 和 all.So 请指出我的代码有什么问题。提前致谢。
Levi 请求 post 我的评论作为答复:
关键是 C++ 的成功之一是它从 C 开始,但它向前发展了很多,你问题中的代码仍然主要是 C-code。这是一个如何在 C++ 中处理它的示例,需要更多知识但出错的机会更少:
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
#include <numeric>
int main()
{
std::cout << "Give 'left', 'right' and 'process' values: \n";
int l, r, a;
std::cin >> l >> r >> a;
std::vector<int> nums((r-l)+2);
std::vector<int> answers;
// fill container with ascending numbers
std::iota(nums.begin(), nums.end(), 1);
// transform as needed
std::transform(nums.begin(), nums.end(), std::back_inserter(answers), [a](int i) { return i/a + i%a; });
// find maximum element in container (returns iterator to element)
auto maxv = std::max_element(answers.begin(), answers.end());
std::cout << *maxv;
}