JAVA олимпиадная задача. Привет, друзья-программисты!На днях наткну

SEO эксперименты, продвижение и монетизация сайтов, интернет-маркетинг, заработок в сети



RSS Feed Twitter!
Следи за экспериментами:
По почте или RSS

Дата публикации:

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);
    }
}

Оба решения считывают входные данные из стандартного ввода и выводят результат в стандартный вывод. Вы можете изменить код, чтобы считывать и записывать данные из файлов, как указано в условии задачи.