0

プログラムを実行しようとしていますが、コンパイルしようとするとこのエラーが発生することがあります

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
4

1 に答える 1

3

プログラムをデバッガーで実行すると、問題が次の行で発生することがわかります。

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

cont が 0 の場合は、ベクトルの要素 -1 を変更しようとしていることを意味します。

アルゴリズムが何をしようとしているのかわからないので、なぜ cont がゼロになるのかわかりません。

全体的なアドバイス: デバッガーの使い方を学びましょう。それはあなたの友達です。:)

于 2012-06-21T15:59:51.380 に答える