Измените псевдокод так, чтобы мы избавились от цикла - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть следующий псевдокод:

read n
p <- 1;
m <- 0;
k <- 0;
while ( n != 0 )
    read x
    for ( i <- 1, k )
        x <- [x / 10]

    if ( x != 0 )
        c <- x % 10
    else
        c <- n % 10

    m <- c * p + m
    n <- [n / 10]
    p <- p * 10
    k <- k + 1
write m

, и я должен преобразовать этот код так, чтобы у нас было всего 1 л oop. Я перебираю примеры снова и снова и не понимаю, что мне делать. Я думаю, что нам сначала нужно это while l oop, поэтому я продолжал пытаться избавиться от этой функции for l oop, но я не понимаю, как я мог получить то же поведение с помощью только одного l oop .

(извините за ужасный стиль псевдокода)

1 Ответ

2 голосов
/ 28 апреля 2020

Если вы говорите о

for ( i <- 1, k )
    x <- [x / 10]

l oop, он делит x на 10 ** k, а

x <- [x / 10**k]

выполняет именно то, что l oop делает Если у вас есть ощущение, что возрождение к силе скрыто, рассмотрите

power_of_ten = 1
while ( n != 0 )
    read x
    x <- [x / power_of_ten]
    ....
    power_of_ten <- power_of_ten * 10
...