【发布时间】:2020-03-31 16:11:43
【问题描述】:
此问题的输入是第一个数字,表示将输入多少个案例进行分析。
输入:
3
8 12
9 27
259 111
第一个数字表示将有 3 个案例。接下来的 3 行是案例。程序要输出3个case的GCD(Greatest Common Divisor)。
4
9
37
我写的代码如下:
#include <iostream>
#include <vector>
int gcd(int a, int b) {
if (b == 0)
return a;
return gcd(b, a % b);
}
int main() {
int N;
std::cin >> N;
int i = 0;
std::vector<int> cards;
while (i <= N) {
i++;
int F1, F2;
std::cin >> F1 >> F2;
cards[i] = gcd(F1, F2);
}
for (int j; j <= N; i++) {
i++;
std::cout << cards[i] << "\n";
}
}
它读取第一个整数(测试用例的数量),运行一次循环(读取一个测试用例)并停止运行。终端输出exited, segmentation fault。有什么问题?
【问题讨论】:
-
存在多个问题。您正在尝试使用 C 风格编写 C++ 代码。再次阅读你的书,使用调试器。
-
您的最后一个 for 循环包含错字。
-
记住 C 数组从索引 0 开始。不要跳过第 0 个条目,使用
<=的循环几乎总是不正确的。 -
您的向量长度为零。是的,它代表一个动态数组,但您仍然需要使用
cards.resize(N)或类似方法设置它的大小(还要记住向量索引是从零开始的)。你的循环看起来也很奇怪;迭代N次的常用习语是for (int i = 0; i < N; i++)。 -
你为什么要标记 C++11、14、17?