Member 14849246 Ответов: 2

Пожалуйста, помогите исправить проблему spoj | на DEV C++ IDE она работает нормально, но при отправке проблемы она дает неправильный ответ


#include<stdio.h>
int main()
{
   int n,i,a[10000],c[10000],j;
   scanf("%d",&n);
   if(n<=1000)
   {
      for(i=0;i<2*n;i++)
      {
         scanf("%d",&a[i]);
      }
      for(j=0,i=0;i<2*n,j<n;i=2*j+2,j++)
      {
         c[j]=(a[i]*a[i+1]);
      }
      for(i=0;i<n;i++)
         printf("%d\n",c[i]);
      return 0;
   }
}


Что я уже пробовал:

старался выполнить все условия, заданные в задаче

проверил состояние тестового образца он работал абсолютно нормально



SPOJ.com - проблема мул[^]

Richard MacCutchan

Пожалуйста, отредактируйте свой вопрос и объясните, в чем проблема. Какой вывод вы видите и почему он неверен?

KarstenK

Используйте отладчик и сделайте некоторый вывод печати во втором цикле for, чтобы увидеть ваш беспорядок.

2 Ответов

Рейтинг:
2

Patrice T

Цитата:
старался выполнить все условия, заданные в задаче

Нет, ты не знал. Читать снова, числа для умножения составляют до 10000 цифр каждое.
Цитата:
проверил состояние тестового образца он работал абсолютно нормально

Да, потому что пример ввода соответствует стандартным целым числам int. Невозможно, чтобы целое число из 10000 цифр поместилось в стандартную целочисленную переменную.
Либо вы используете библиотеку BigInt, либо воссоздаете ее эквивалент.

Нет никакой коррекции, потому что программа просто не соответствует проблеме.

Эта петля
for(j=0,i=0;i<2*n,j<n;i=2*j+2,j++)

это сложно ни для чего, и может быть упрощено до
for(i=0;i<2*n;i+=2)


Member 14849246

так как же хранить такое большое количество цифр 10000, если мы должны использовать long long int ? что такое библиотека bigint?

Patrice T

Google BigInt.

Рейтинг:
1

OriginalGriff

Компиляция не означает, что ваш код верен! :смеяться:
Подумайте о процессе разработки как о написании электронного письма: успешная компиляция означает, что вы написали электронное письмо на правильном языке - например, на английском, а не на немецком, - а не то, что письмо содержало сообщение, которое вы хотели отправить.

Итак, теперь вы входите во вторую стадию разработки (на самом деле это четвертая или пятая, но вы перейдете к более ранним стадиям позже): тестирование и отладка.

Начните с рассмотрения того, что он делает, и как это отличается от того, что вы хотели. Это важно, потому что это дает вам информацию о том, почему он это делает. Например, если программа предназначена для того, чтобы позволить пользователю ввести число, а он удваивает его и печатает ответ, то если ввод / вывод был таким:

Input   Expected output    Actual output
  1            2                 1
  2            4                 4
  3            6                 9
  4            8                16
Тогда совершенно очевидно, что проблема заключается в бите, который удваивает его - он не прибавляет себя к себе или умножает его на 2, он умножает его на себя и возвращает квадрат входного сигнала.
Таким образом, вы можете посмотреть на код, и очевидно, что он находится где-то здесь:
int Double(int value)
   {
   return value * value;
   }

Как только у вас появится идея, что может пойти не так, начните использовать отладчик, чтобы выяснить, почему. Поместите точку останова в первую строку метода и запустите приложение. Когда он достигнет точки останова, отладчик остановится и передаст управление вам. Теперь вы можете запускать свой код построчно (так называемый "одноступенчатый") и просматривать (или даже изменять) содержимое переменных по мере необходимости (черт возьми, вы даже можете изменить код и повторить попытку, если вам это нужно).
Подумайте о том, что должна делать каждая строка кода перед ее выполнением, и сравните это с тем, что она действительно делала, когда вы использовали кнопку "Step over" для выполнения каждой строки по очереди. Он сделал то, что вы ожидали? Если да, то переходите к следующей строке.
Если нет, то почему? Чем это отличается?
Надеюсь, это поможет вам определить, в какой части этого кода есть проблема и в чем она заключается.

Если вы не знаете, как использовать отладчик, то Google для названия вашей IDE (интегрированной среды разработки, в которой вы редактируете, компилируете и тестируете свой код) плюс слово "отладчик", и он найдет для вас инструкции.

Это навык, и его стоит развивать, поскольку он помогает вам как в реальном мире, так и в развитии. И, как и все навыки, он только улучшается при использовании!