1

Тема: Слово

Допоможіть будь ласка розібратися в задачі.
Слово
Назва вхiдного файлу: standard input
Назва вихiдного файлу: standard output
Лiмiт часу: 0.5 seconds
Лiмiт використання пам’ятi: 256 megabytes
Слово називається добре впорядкованим, якщо його лiтери iдуть у неспадному порядку. Складiть
програму, яка буде визначати чи добре впорядковане слово.
Формат вхiдних даних
Перший рядок мiстить цiле число T (0 < T < 10) - кiлькiсть тестiв. У наступних T рядках
мiститься по одному слову довжиною не бiльше 255 символiв. Слова мiстять лише малi латинськi
лiтери.
Формат вихiдних даних
Вивести в окремих рядках для кожного слова ’Yes’ або ’No’ в залежностi вiд того, чи є слово
добре впорядкованим.
Приклад
standard input        standard output
2
all                          Yes
will                         No

Мій код:

n=list(input())
c=[]
for i in range(len(n)):
    a=ord(n[i])
    b=a
    c.append(int(b))
    for y in range(len(c)):
        if c[y]<c[y]+1:
            print("Yes")
        else:
            print("No")

2 Востаннє редагувалося P.Y. (19.12.2019 21:22:16)

Re: Слово

В чому помилка: ви виводите результат при порівнянні кожно пари символів у рядку. Тоді як у циклі треба переконатися, що всі пари чисел ідуть у неспадному порядку, і тільки після того (вже після завершення циклу) виводити результат. Є різні варіанти, як це зробити (використати додаткові логічні змінні, використати цикл for з гілкою else тощо).

Подякували: koala, leofun01, ReAl3

3

Re: Слово

Ще одна помилка (чи це одрук):

if c[y]<c[y]+1:

Треба збільшувати на 1 не символ рядка (це викличе помилку при виконанні), а індекс цього символа, щоб отримати наступний:

if c[y]<c[y+1]:
Подякували: koala1

4

Re: Слово

Дуже короткий розв'язок (77 байт)
input();print("\n".join("YNeos"[sorted(x)!=[*x]::2]for x in input().split()))
Подякували: P.Y., plusxx2

5 Востаннє редагувалося ReAl (20.12.2019 09:36:51)

Re: Слово

P.Y. написав:

В чому помилка: ви виводите результат при порівнянні кожно пари символів у рядку. Тоді як у циклі треба переконатися, що всі пари чисел ідуть у неспадному порядку, і тільки після того (вже після завершення циклу) виводити результат. Є різні варіанти, як це зробити (використати додаткові логічні змінні, використати цикл for з гілкою else тощо).

Не обов'язково «всі пари» (це по часу еквівалентно звичайному сортуванню), досить під час перегляду рядка зберігати поточний максимум (ініціалізувати першим елементом, рядок у циклі переглядати з другого) і кожне наступний елемент порівнювати з цим максимумом. Матимемо по часу  O(n) а не O(n2) (чи O(n lg n), якщо не «всі пари», а кращим методом).