Задача: Трамвайные билеты. Покритикуйте
Добавлено: 07 окт 2010, 18:38
Написать программу определения количества шестизначных "счастливых" трамвайных билетов, у которых сумма первых трех цифр совпадает с суммой трех последних.
Оптимизировать решение по времени выполнения. Количество билетов вывести в файл output.txt
Привет, решение данной задачи на Java. Покритикуйте.
Код: Выделить всё
package olympicexercises;
import java.io.*;
import java.util.*;
import java.text.*;
public class LuckyNumbersSolver
{
/**
* Нахождение шестизначных "счастливых" трамвайных билетов, у которых сумма первых трех цифр совпадает с суммой трех
* последних
*
* @param numbers - массив номеров
* @return массив счастливых номеров
*/
private static List<String> findLuckyNumbers(List<String> numbers)
{
List<String> luckyNumbers = new ArrayList<String>();
for (String number : numbers) {
int sumLeft = Character.digit(number.charAt(0), 10) + Character.digit(number.charAt(1), 10) + Character
.digit(number.charAt(2), 10); // суммируем первые 3 цифры в номере
int sumRight = Character.digit(number.charAt(4), 10) + Character.digit(number.charAt(5), 10) + Character
.digit(number.charAt(6), 10); // суммируем последние 3 цифры в номере
if (sumLeft == sumRight) { // проверяем на совпадение сумму первых трех цифр с суммой трех последних
luckyNumbers.add(number); // добавляем "счастливый" номер в массив
}
}
return luckyNumbers;
}
public static void main(String[] args) throws IOException
{
final List<String> numbers = new ArrayList<String>();
NumberFormat nf = NumberFormat.getInstance();
nf.setMinimumIntegerDigits(6);
final int start = 0, end = 999999;
final String from = nf.format(start), to = nf.format(end), message;
for (int i = start; i <= end; i++) // инициализация коллекции номеров для поиска
numbers.add(nf.format(i));
System.out.println(findLuckyNumbers(numbers));
message = "Count of lucky train tickets from " + from + " to " + to + ": " + findLuckyNumbers(numbers).size();
System.out.println(message);
// Выгрузим "счастливые" номера в файл
final PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("src/olympicexercises/output.txt")));
out.println(message);
out.println(findLuckyNumbers(numbers));
out.close();
}
}