Почему этот код выдает ошибку за пределами границ? - PullRequest
0 голосов
/ 13 апреля 2020

Я пытался понять ошибку, выходящую за рамки следующего кода, но я не могу понять. Исходная проблема: https://codeforces.com/contest/148/problem/A. Я не знаю, почему я застрял, и можете ли вы сказать мне, как я могу избежать подобных ошибок.

  #include <iostream>
  using namespace std;
  int main()
  {
    std::ios::sync_with_stdio(false);
    int k,l,m,n,d,count=0;

    cin>>k>>l>>m>>n>>d;
    int arr[d]={0}; 

    for (int i = 0; i < d; ++i){
      int k1=k*(i+1); k1--;
      int l1=l*(i+1); l1--;
      int m1=m*(i+1); m1--;
      int n1=n*(i+1); n1--;

      if(arr[k1]==0 && k1<d){
        arr[k1]=1; count++;
      }
      if(arr[l1]==0 && l1<d){
        arr[l1]=1; count++;
      }
      if(arr[m1]==0 && m1<d){
        arr[m1]=1; count++;
      }
      if(arr[n1]==0 && n1<d){
        arr[n1]=1; count++;
      }

    }

    cout<<count;


    return 0;
  }

1 Ответ

1 голос
/ 13 апреля 2020

Сначала необходимо проверить границы, в:

if(arr[k1]==0 && k1<d)

с помощью:

if(k1<d && arr[k1]==0)

Второе условие не будет проверяться, если первое условие ложно. Но аналог не соответствует действительности. Первое условие всегда будет проверено.

...