Чем данная программа на Python отличается от программы на C++?
Есть две программы, на Pyhton и на C++. Не могу разобраться, почему они возвращают разный ответ, на Python 388 (верный ответ), а на C++ 375. При этом, если заменить j-i >= 5 на j-i >= 4 С++ начинает возвращать верный ответ.
На Python
f = open("27A.txt")
N = int(f.readline())
a = [int(x) for x in f]
k = 0
for i in range(N):
for j in range(i+1, N):
if (a[i]+a[j])%2 != 0 and (a[i]*a[j])%13 == 0 and j-i >= 5:
k += 1
print(k)
На С++
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;
int main(){
int n = 0;
ifstream f("27A.txt");
f >> n;
vector<int> a(n);
for (int i = 0; i < n; i++) f >> a[i];
int k = 0;
for (int i = 0; i < n; i++){
for (int j = i+1; j < n; j++){
if ((a[i]+a[j])%2 != 0 && (a[i]*a[j])%13 == 0 && j-i >= 5){
k++;
}
}
}
cout << k << endl;
return 0;
}
Ссылка на файл https://kompege.ru/files/e6zJggVnP.txt
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
При замене на >= 4 правильный ответ — чисто случайно.
Замените int на long long int.
Смотрите, например, возьмем реально наличествующие в списке 71243 и 64210. Их произведение равно 4574513030, что никак в int не влезает. Усечение, неверный результат...
В Python такого ограничения на целочисленные вычисления нет.
P.S. А можно оставить int и чуть оптимизировать:
for (int i = 0; i < n; i++)
for (int j = i+5; j < n; j++)
if ((a[i]+a[j])%2 && !((a[i]%13)*(a[j]%13))) k++;