Advertisement
dllbridge

Untitled

Sep 21st, 2024
32
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.26 KB | None | 0 0
  1.  
  2.  
  3.  
  4. //  Суть задачи сводится к поиску элемента массива, и печати его индекса.
  5. //  Слева от искомого элемента, сумма всех элементов должна быть ровна
  6. //  сумме всех элементов, расположенных справа.
  7. //  Например, в массиве: 1, 2, 0, 3 таким элементом будет 0, а его индекс 2 надо напечатать в качестве ответа.  
  8.  
  9. #include  <iostream>
  10. #include    <vector>
  11. using namespace std;
  12.  
  13.                      //  "= 1" в режиме TEST.
  14. int debugging = 0;   //  "= 0" в режиме автоматизированной проверки.
  15.  
  16. // Функция для поиска индекса числа в массиве, слева от которого сумма
  17. //  элементов равна сумме элементов, стоящих справа от него
  18. ///////////////////////////////////////////////////////////
  19. int findIndex(const vector<int>& arr)                    //  Функция принимает ссылку на массив arr.
  20. {
  21.     int leftSum = 0,                                     //  Храним здесь сумму чисел до исследуемого числа
  22.        rightSum = 0;                                     //  ... сумма после (справа) от исследуемого числа
  23.  
  24.                                                          //  Считаем сумму всех чисел. Они будут суммой справа.
  25.  for(int i = 0; i < arr.size(); ++i)  rightSum += arr[i];      if(debugging) cout << "right = "<< rightSum << endl;
  26.  for(int i = 0; i < arr.size(); ++i)                     //  Запускаем цикл для поиска числа, по отношеению к которому
  27.  {                                                       //  сумма всех элементов расположенных слева и справа =
  28.                                                          //  между собой.
  29.      if(i!=0) leftSum += arr[i-1];
  30.           rightSum -= arr[i  ];
  31.      
  32.      if(debugging) cout << "i = "<< i << ", rightSum = " << rightSum << ", leftSum = " << leftSum << endl;
  33.      
  34.      if(leftSum == rightSum) return i;                  //  Такой элемент в массиве найден!  
  35.  }
  36. return -1;                                              //  Элемент такой во всём массиве не найден.
  37. }
  38.  
  39. int init(vector<int> &arr);                             //  Прототип функциии init()
  40.  
  41. ////////////////////////////////////////////////////////////
  42. int main()
  43. {
  44.     int N = 4;
  45.    
  46.    // int nArr[8000000];
  47.    
  48.     if(debugging == 0) cin >> N;                          // Если авто-проверка, то ожидаем ввод из потока
  49.    
  50.     vector<int> arr(N);                                   //  Создаём динамический массив (вектор) arr
  51.    
  52.     if(debugging) init(arr);
  53.     else          
  54.     for(int i = 0; i < N; ++i)
  55.     {
  56.         cin >> arr[i]; // Если авто-проверка, то ожидаем ввод из потока
  57.     }
  58.     cout << findIndex(arr);                               //  Вызываем функцию, которая вернёт индекс элемента массива,
  59.                                                           //  либо вернёт -1, если не найдёт подходящий элемент.
  60. return 0;
  61. }
  62.  
  63.  
  64.  
  65. //  Для тестирования ТОЛЬКО
  66. //  Функция нужна, чтобы в процессе отладки решения, каждый раз не вводить с клавиатуры одни и те же числа.
  67. ////////////////////////////////////////////////////////////
  68. int init(vector<int> &arr)                                //     Функция принимает ссылку на массив arr.
  69. {
  70.    
  71.   //int nArr[99] = {1, 0, -1, 2};
  72.    
  73.     int nArr[99] = {2, 7, 1, -8};
  74.    
  75.     for(int i = 0; i < arr.size(); ++i)
  76.     {
  77.            
  78.         arr[i] = nArr[i];    
  79.     }
  80. }
  81.  
  82.  
  83.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement