Последовательность целых чисел (в порядке возрастания или убывания) - PullRequest
1 голос
/ 02 мая 2020

Последовательность целых чисел, проверьте, упорядочен ли он true (в порядке возрастания или убывания), в противном случае он равен false. Если число имеет то же значение, что и число ниже, оно не нарушит порядок. Последовательность заканчивается на 0.

Sample Input 1: 9 8 7 6 5 4 3 2 1 0
Sample Output 1:true
--------------------------------
Sample Input 2: 1 2 3 3 9 0
Sample Output 2:true
--------------------------------
Sample Input 3: 1 2 5 5 2 3 0
Sample Output 3: false
--------------------------------

Мне нужна помощь, я пытался в течение нескольких дней ... Я действительно ценю любую помощь ...

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        int a = 0;
        while (s.hasNextInt()) {
            int i = s.nextInt();
            a = i;
            if (i < a) {
                if (i < a) {
                    System.out.println("true");
                } else if (i > a) {
                    System.out.println("false");
                    break;
                }
            } else if (i > a) {
                if (i > a) {
                    System.out.println("true");
                } else if (i < a) {
                    System.out.println("false");
                    break;
                }
            } else if (i == a) {
            }
        }
    }
}

Ответы [ 4 ]

2 голосов
/ 03 мая 2020

Полагаю, 0 не может появиться нигде, кроме как в конце.

static boolean ordered(Scanner s)
{
    int curr, prev;
    curr = prev = s.nextInt();

    while(s.hasNextInt() && (curr = s.nextInt()) == prev);

    if(curr < prev)
        while(s.hasNextInt() && (curr = s.nextInt()) <= prev) prev = curr;
    else
        while(s.hasNextInt() && (curr = s.nextInt()) >= prev) prev = curr;

    return curr == 0;
}

Тест:

public static void main(String[] args)
{
    test("0");
    test("1 0");
    test("1 1 0");
    test("9 9 8 7 6 6 5 4 3 2 1 0");
    test("1 1 2 3 3 3 9 0");
    test("1 2 5 5 2 3 0");
    test("9 8 7 6 7 8 9 0");        
}

static void test(String str)
{
    System.out.format("%s : %b%n", str, ordered(new Scanner(str)));
}

Вывод:

0 : true
1 0 : true
1 1 0 : true
9 9 8 7 6 6 5 4 3 2 1 0 : true
1 1 2 3 3 3 9 0 : true
1 2 5 5 2 3 0 : false
9 8 7 6 7 8 9 0 : false
2 голосов
/ 02 мая 2020

Вам нужно изменить свой код следующим образом:

Scanner sc = new Scanner(System.in);

int prev = sc.nextInt();
int curr = sc.nextInt();

while (sc.hasNextInt() && prev == curr) {
    prev = curr;
    curr = sc.nextInt();
}

boolean flag = prev < curr;

while (sc.hasNextInt()) {
    prev = curr;
    curr = sc.nextInt();

    if (prev < curr && flag) {
        System.out.println("Ascending");
    } else if (prev > curr && !flag) {
        System.out.println("Descending");
    } else if (prev == curr) {
        System.out.println("Equal");
    } else {
        System.out.println("Not sorted");
        break;
    }
}

Вы можете поместить это в метод и return false из else и return true из конца метода.

2 голосов
/ 02 мая 2020

Я не скажу вам код, так как это не очень поможет, но я могу помочь с подходом, который вам нужен.

  1. По первым двум входам оцените, будет ли шаблон увеличиваться или уменьшаться.
  2. Затем с помощью шаблона проверьте, всегда ли число = или меньше / больше числа
  3. Проверьте последнее значение. Это должно быть 0, но это может или не может быть в соответствии с шаблоном (в некоторых случаях это может привести к тому, что сам правильный шаблон сбивает с толку, если он является действительным числом или концом списка)
  4. Если последнее число не равно 0 тогда вывод должен быть ложным.
1 голос
/ 03 мая 2020
  1. На основе первых двух входов (вам понадобится переменная счетчика, например, count), решите, должны ли остальные числа быть в порядке возрастания или в порядке убывания. Вы можете использовать переменную boolean, например, asc, чтобы сохранить этот результат, т. Е. Если второе число больше первого, значение asc будет true; в противном случае false.
  2. После того, как вы определили значение asc из первых двух чисел, вам необходимо проверить, следует ли следующее число этому шаблону или нет. Если следующее число не соответствует шаблону, выведите false и прервите обработку.
  3. Для каждого числа, которое читает сканер, вам также необходимо проверить, является ли оно 0. Если да, выведите true и прервите обработку. Кроме того, поскольку ваше требование упоминает, "Если число имеет то же значение, что и число ниже, оно не нарушит порядок." , просто continue, если число, считываемое сканером, имеет то же значение как последний прочитанный номер.
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        boolean asc = true;
        int i = 0, j = 0, count = 0;
        while (true) {
            if (count < 2) {
                i = s.nextInt();
                if (i == 0) {
                    System.out.println(true);
                    break;
                }
                count++;
            } else {
                // Store the last input to `i` and read a new number into `j`
                i = j;
                j = s.nextInt();

                // Continue if the new number has the same value as the last read number
                if (i == j) {
                    continue;
                }

                if (j == 0) {
                    System.out.println(true);
                    break;
                }
                count++;
            }
            if (count <= 2) {
                j = s.nextInt();

                // Continue if the new number has the same value as the last read number
                if (i == j) {
                    continue;
                }

                if (j == 0) {
                    System.out.println(true);
                    break;
                }
                count++;
            }

            // Based on the first two inputs decide whether the remaining numbers should be
            // in ascending order or in descending order.
            if (count == 2 && j < i) {
                asc = false;
            }

            // Check if the next number (i.e. the value of `j`) follows this pattern or not
            if ((asc == true && j < i) || (asc == false && j > i)) {
                System.out.println(false);
                break;
            }
        }
    }
}

Пробный прогон:

9 8 7 6 5 4 3 2 1 0
true

Другой пробный прогон:

1 2 3 3 9 0
true

Еще один пробный прогон:

1 2 5 5 2 3 0
false

Еще один пробный прогон:

9 9 8 0
true

Еще один пробный прогон :

5 5 6 0
true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...