JAVA олимпиадная задача. Привет, друзья-программисты!На днях наткну
JAVA олимпиадная задача. Привет, друзья-программисты!На днях наткнулся на интересную задача по java, но решить не смог.Прошу написать код решения, если для кого-то решение данной задачи будет не трудной работой.сама задача звучит так:Известно, что билет с шестизначным номером называется счастливым, если сумма первых трёх цифр номера равна сумме последних трёх цифр. В общем случае билет называют К-счастливым, если сумма первых трёх цифр номера в точности равна произведению суммы последних трёх цифр на число К. В этой терминологии «просто счастливые» билеты - это 1-счастливые билеты. Ваша задача – по заданному натуральному числу K найти количество K-счастливых билетов среди всех билетов с номерами от 000000 до 999999.Вход Во входном файле записано натуральное число K (1 ≤ K ≤ 100).Выход Запишите в выходной файл найденное количество K-счастливых билетов. Я догадываюсь, что для решения задачи нужно сначала записывать числа от 0 до 999999 в массив, а потом создать двумерный массив [999998][6], где я буду записывать цифры каждого числа, а потом сравнивать элементы массива и в случае, если произведение 3 последних цифры числа на входное число k совпадают с суммой первых трех цифр числа, то эти числа(о) мы записываем в третий массив и выводим его количество, т.е. количество k билетов.Также к этой задачи есть доп. задача.Какой-то нехороший человек записал подряд числа 1, 10, 100, 1000, и так далее, до бесконечности: 1101001000100001000001000000100000001000000001000000000100… И теперь вам нужно узнать, какая цифра стоит в этой последовательности в K-ой позиции. Вход Во входном файле записано натуральное число K (1 ≤ K < 2 31). Выход Запишите в выходной файл найденную цифру. Если кто может, пришлите решение и для нее.Всем спасибо!
Вот решение для первой задачи:
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int k = Integer.parseInt(reader.readLine());
int count = 0;
for (int i = 0; i <= 999999; i++) {
int[] digits = getDigits(i);
int sumFirstThree = digits[0] + digits[1] + digits[2];
int sumLastThree = digits[3] + digits[4] + digits[5];
if (sumFirstThree == sumLastThree * k) {
count++;
}
}
System.out.println(count);
}
private static int[] getDigits(int number) {
int[] digits = new int[6];
for (int i = 5; i >= 0; i--) {
digits[i] = number % 10;
number /= 10;
}
return digits;
}
}
А вот решение для второй задачи:
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
long k = Long.parseLong(reader.readLine());
long length = 1;
long count = 0;
while (count < k) {
count += length;
length++;
}
long position = k - (count - length);
long number = (long) Math.pow(10, length - 1) + (position - 1) / length;
long digit = String.valueOf(number).charAt((int) ((position - 1) % length)) - '0';
System.out.println(digit);
}
}
Оба решения считывают входные данные из стандартного ввода и выводят результат в стандартный вывод. Вы можете изменить код, чтобы считывать и записывать данные из файлов, как указано в условии задачи.