Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Задача 17 егэ информатика

wefwe wefwfe Ученик (115), закрыт 1 год назад
Приветствую! Есть следующее задание:
В файле содержится последовательность из 10 000 целых положительных чисел. Каждое число не превышает 10 000. Определите и запишите в ответе сначала количество пар элементов последовательности, у которых сумма элементов кратна 117, затем максимальную из сумм элементов таких пар. В данной задаче под парой подразумевается два различных элемента последовательности. Порядок элементов в паре не важен.

У меня получилась следующая прога:
Не могу понять, ответ на решу егэ на 42 значения больше, где я их потерял? Мой ответ: 427078 19890. Их ответ: 427120 19890.

import java.util.Scanner;
import java .io.*;
class test {
public static void main(String[] args) throws Exception {
try (InputStream is = new FileInputStream("17(3).txt")) {
Scanner scanner = new Scanner(is);
int[] a = new int[10000];
int d = 0;
int maxsum = 0;
for(int j = 0; scanner.hasNextInt(); j++){
a[j] = scanner.nextInt();
}
for(int e = 0; e<10000; e++) {
int c = 0;
do {
if (a[e]!=a[c]) {
if (((a[e] + a[c]) % 117) == 0) {
d++;
if (maxsum < a[e] + a[c])
maxsum = a[e] + a[c];
}
}
c++;
} while (c < 10000);
}
System.out.println(d/2 + " " + maxsum);
} catch (IOException fatal){
System.out.println(fatal.getMessage());
}
}
}
Лучший ответ
Оракул Оракул (59210) 1 год назад
Во-первых, какого хрена не прикладываете файл? Что за тупость?
Во-вторых, тупейший do while внутри for. Проще обойтись двумя форами.
В-третьих, if (a[e] != a[c]) - неправильное условие. Игнорируете одинаковые числа в паре. Они не должны быть одним и тем же числом, а не одинаковыми, значит сравнивать надо не числа, а их индексы. Этой проблемы не было бы, если бы юзали for, вместо do while.
И d/2 в конце тоже не было бы по той же причине.
Называйте переменные логично.
wefwe wefwfeУченик (115) 1 год назад
За файл извиняюсь, а за остальное спасибо
wefwe wefwfeУченик (115) 1 год назад
файл: https://inf-ege .sdamgia.ru/get_file?id=91233
я исправил, но все равно ответ 426319

for(int j = 0; scanner.hasNextInt(); j++)
a[j] = scanner.nextInt();
for(int e = 0; e < 10000; e++) {
for (int c = 0; c < 10000; c++){
if (e!=c) {
if (((a[e] + a[c]) % 117) == 0) {
d++;
if (maxsum < a[e] + a[c])
maxsum = a[e] + a[c];
}
}
c++;
}
}
Оракул Оракул (59210) wefwe wefwfe, заменили на for, но внутренний опять неверный, вы повторно суммируете те пары, что уже суммировали for(int e = 0; e < 9999; e++) { for (int c = e + 1; c < 10000; c++) {
wefwe wefwfeУченик (115) 1 год назад
я забыл просто с++ после того while убрать, уже понял
Остальные ответы
Похожие вопросы