程序在输出后崩溃

Program crashes after output

本文关键字:崩溃 输出 程序      更新时间:2023-10-16

我正在尝试运行程序,有时我在尝试编译时遇到此错误

LD 返回 1 个退出状态

虽然,当它编译(就像我说的,并非总是如此)并尝试输入某些输入时,程序会输出答案......然后崩溃。有什么办法可以吗?

这是我的代码:

#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
using namespace std;
int main() {
  bool flag;
  int n,x[] = {1,-1};
  long long int A,cont,mul,acum;
  while(cin >> n >> A) {
    acum = 0;
    vector<long long int> nums(n),nums2;
    for(int i=0;i<n;i++) cin >> nums[i];
    sort(nums.begin(),nums.end());
    for(int i=n-1;i>=0;i--) {
      flag = 1;
      for(int j=0;j<i and flag;j++) if(nums[i]%nums[j] == 0) flag = 0;
      if(flag) nums2.push_back(nums[i]);
    }
    n = nums2.size();
    vector<long long int> mult(n,0);
    const long long int num = (1<<n);
    for(int i=0;i<num;i++) {
      cont = 0, mul = 1;
      for(int j=n-1;j>=0;j--) if(i & (1<<j)) cont++, mul *= nums2[j];
      mult[cont-1] += A/mul;
    }
    for(int i=0;i<n;i++) acum += (x[i%2]*mult[i]);
    cout << acum << endl;
  }
  return 0;
}

这是我在程序崩溃时输入的输入:

17 1000
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

如果在调试器中运行程序,您将看到问题发生在

mult[cont-1] += A/mul;

当 cont 为 0 时,这意味着您正在尝试修改向量的元素 -1。

我无法判断

算法试图做什么,所以我无法判断为什么 cont 最终会为零。

总体建议:学习使用调试器。这是你的朋友。:)