Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Задачи на числа. Решение. Покритикуйте. (часть №1)

80K
15 марта 2012 года
m1st
1 / / 15.03.2012
Цитата:
Ввести с консоли n целых чисел и поместить их в массив. На консоль вывести:
1. Четные и нечетные числа.
2. Наибольшее и наименьшее число.
3. Числа, которые делятся на 3 или на 9.
4. Числа, которые делятся на 5 и на 7.
5. Элементы, расположенные методом пузырька по убыванию модулей.
6. Все трехзначные числа, в десятичной записи которых нет одинаковых цифр.
7. Наибольший общий делитель и наименьшее общее кратное этих чисел.
8. Простые числа.
9. Отсортированные числа в порядке возрастания и убывания.
10. Числа в порядке убывания частоты встречаемости чисел.
11. “Счастливые” числа.
12. Числа Фибоначчи: f0 = f1 = 1, f (n) = f (n–1) + f (n–2).
13. Числа-палиндромы, значения которых в прямом и обратном порядке совпадают.
14. Элементы, которые равны полусумме соседних эле¬ментов.
15. Период десятичной дроби p = m/n для первых двух целых положительных чисел n и m, расположенных подряд.
16. Построить треугольник Паскаля для первого положительного числа.




Код:
package chapt01.b;

import java.util.*;
import static java.util.Collections.*;

/**
 * Ввести с консоли n целых чисел и поместить их в массив. На консоль вывести:
 *
 * @author m1st
 */


public class OperationsWithNumbers {
    private static List<Integer> divider(int divider, Integer[] array) {
        List<Integer> divided = new LinkedList<Integer>();
        for (Integer anArray : array) {
            if (anArray % divider == 0)
                divided.add(anArray);
        }
        return divided;
    }

    private static Map revSortByVal(Map<Integer, Integer> map) {
        List<Object> list = new LinkedList<Object>(map.entrySet());
        sort(list, new Comparator() {
            public int compare(Object o1, Object o2) {
                return ((Comparable) ((Map.Entry) (o2)).getValue())
                        .compareTo(((Map.Entry) (o1)).getValue());
            }
        });
        Map result = new LinkedHashMap();
        for (Object aList : list) {
            Map.Entry entry = (Map.Entry) aList;
            result.put(entry.getKey(), entry.getValue());
        }
        return result;
    }

    private static List<Integer> bubbleRevSortByMod(Integer[] input) {
        Integer[] nums = input.clone();
        boolean swapped = true;
        int j = 0;
        int tmp;
        while (swapped) {
            swapped = false;
            j++;
            for (int i = 0; i < nums.length - j; i++) {
                if (Math.abs(nums) < Math.abs(nums[i + 1])) {
                    tmp = nums;
                    nums = nums[i + 1];
                    nums[i + 1] = tmp;
                    swapped = true;
                }
            }
        }
        return Arrays.asList(nums);
    }

    private static long gcd(long a, long b) // Greatest Common Divisor
    {
        while (b > 0) {
            long temp = b;
            b = a % b;
            a = temp;
        }
        return a;
    }

    private static long gcd(Integer[] input) {
        long result = input[0];
        for (int i = 1; i < input.length; i++)
            result = gcd(result, input);
        return result;
    }

    private static long lcm(long a, long b) // Least Common Multiple
    {
        return a * (b / gcd(a, b));
    }

    private static long lcm(Integer[] input) {
        long result = input[0];
        for (int i = 1; i < input.length; i++) {
            if ((input == 0 || input[0] == 0)
                    || (input < 0 || input[0] < 0))
                break;
            result = lcm(result, input);
        }
        return result;
    }

    private static List<Integer> list1 = new LinkedList<Integer>();
    private static List<Integer> list2 = new LinkedList<Integer>();

    public static List<Integer> primeNums(Integer[] input) {
        list1.clear();
        for (Integer anInput : input) {
            if (isPrimeNum(anInput)) {
                list1.add(anInput);
            }
        }
        return list1;
    }

    public static boolean isPrimeNum(int n) {
        boolean prime = true;
        for (long i = 3; i <= Math.sqrt(n); i += 2) {
            if (n % i == 0) {
                prime = false;
                break;
            }
        }
        return (n % 2 != 0 && prime && n > 2) || n == 2;
    }

    private static Map<Integer, Integer> map = new TreeMap<Integer, Integer>();
    private static Map<Integer, Integer> invMap = new TreeMap<Integer, Integer>();

    private static void put(Integer key, Integer value) {
        map.put(key, value);
        invMap.put(value, key);
    }

    private static void buildPascalTriangle(int number, int rows) {
        for (int y = 0; y < rows; y++) {
            int c = number;
            for (int w = 0; w < rows - y; w++) {
                System.out.print("   ");
            }
            for (int x = 0; x <= y; x++) {
                System.out.print("   " + c + " ");
                c = c * (y - x) / (x + 1);
            }
            System.out.println();
        }
    }

    public static void main(String[] args) {
        System.out.print("Сколько целых чисел вы собираетесь ввести? ");
        Scanner in = new Scanner(System.in);
        int size = in.nextInt();
        if (size == 0) {
            System.out.print("Программа завершена.");
            System.exit(0);
        }
        Integer[] numbers = new Integer[size];
        System.out.print("Введите целые числа через пробел "
                + "и нажмите <Enter>: ");
        for (int i = 0; i < size; i++)
            numbers = in.nextInt();

        // 1. Четные и нечетные числа
        for (int i = 0; i < size; i++) {
            if (numbers % 2 == 0)
                list1.add(numbers);
            else
                list2.add(numbers);
        }
        System.out.println("Чётные числа: " + list1);
        System.out.println("Нечётные числа: " + list2);

        // 2. Наибольшее и наименьшее число.
        List<Integer> listFromArray = Arrays.asList(numbers);
        System.out.println("Наибольшее число: " + max(listFromArray));
        System.out.println("Наименьшее число: " + min(listFromArray));

        // 3. Числа, которые делятся на 3 или на 9.
        System.out.println("Числа, которые делятся на 3: "
                + divider(3, numbers));
        System.out.println("Числа, которые делятся на 9: "
                + divider(9, numbers));

        // 4. Числа, которые делятся на 5 и на 7.
        System.out.println("Числа, которые делятся на 5: "
                + divider(5, numbers));
        System.out.println("Числа, которые делятся на 7: "
                + divider(7, numbers));

        // 5. Элементы, расположенные методом пузырька по убыванию модулей. //
        System.out.println("Элементы, расположенные методом пузырька "
                + "по убыванию модулей: " + bubbleRevSortByMod(numbers));

        // 6. Все трехзначные числа, в десятичной записи которых нет одинаковых
        // цифр.
        String num;
        list1.clear();
        for (int i = 0; i < size; i++) {
            num = numbers.toString();
            if (num.length() == 3 && num.charAt(0) != num.charAt(1)
                    && num.charAt(1) != num.charAt(2)
                    && num.charAt(0) != num.charAt(2))
                list1.add(numbers);
        }
        System.out.println("Все трехзначные числа, "
                + "в десятичной записи которых нет одинаковых цифр: " + list1);

        // 7. Наибольший общий делитель и наименьшее общее кратное этих чисел.
        System.out.println("Наибольший общий делитель: " + gcd(numbers));
        System.out.println("Наименьшее общее кратное: " + lcm(numbers));

        // 8. Простые числа.
        System.out.println("Простые числа: " + primeNums(numbers));

        // 9. Отсортированные числа в порядке возрастания и убывания.
        list1.clear();
        list1.addAll(listFromArray);
        sort(list1);
        System.out.println("Отсортированные числа в порядке возрастания: "
                + list1);
        reverse(list1);
        System.out
                .println("Отсортированные числа в порядке убывания: " + list1);

        // 10. Числа в порядке убывания частоты встречаемости чисел.
        for (Integer i : numbers) {
            put(i, frequency(listFromArray, i));
        }
        System.out.println("Числа в порядке убывания частоты встречаемости "
                + "чисел <Число=Встречаемость>: " + revSortByVal(map));

        // 11. “Счастливые” числа.
        list1.clear();
        for (int i = 0; i < size; i++) {
            num = numbers.toString();
            if (num.length() == 4
                    && num.charAt(0) + num.charAt(1) == num.charAt(2)
                            + num.charAt(3))
                list1.add(numbers);
        }
        System.out.println("“Счастливые” числа (Σ 1-ой пары чисел "
                + "= Σ 2-ой пары): " + list1);

        // 12. Числа Фибоначчи: f0 = f1 = 1, f (n) = f (n–1) + f (n–2).
        list1.clear();
        for (int i = 2; i < size - 2; i++) {
            if (numbers.length < 3)
                break;
            else if (numbers[i + 2] == numbers + numbers[i + 1])
                list1.add(numbers);
        }
        System.out.println("Числа Фибоначчи: " + list1);

        // 13. Числа-палиндромы, значения которых в прямом и обратном порядке
        // совпадают.
        List<StringBuilder> palindromes = new LinkedList<StringBuilder>();
        for (int i = 0; i < size; i++) {
            StringBuilder s = new StringBuilder(numbers.toString());
            if (s.toString().equals(s.reverse().toString()))
                palindromes.add(s);
        }
        System.out.println("Числа-палиндромы: " + palindromes);

        // 14. Элементы, которые равны полусумме соседних элементов.
        list1.clear();
        Integer[] int2;
        int2 = numbers.clone();
        for (int i = 1; i < int2.length - 1; i++) {
            if (int2.length < 3)
                break;
            if (int2 == (int2[i - 1] + int2[i + 1]) / 2)
                list1.add(int2);
        }
        System.out.println("Элементы, которые равны полусумме соседних "
                + "элементов: " + list1);

        /**
         * 15. Период десятичной дроби p = m/n для первых двух целых
         * положительных чисел n и m, расположенных подряд.
         *
         * @author RodionGork
         */

        long p, q, r, l, t, i;
        for (int n = 0; n < size -
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог