Отображения (map): Напишите программу 1

Сообщения
1,547
Реакции
271
Веб-сайт
tehadm.ru
Внутри функции main (объявлять функцию не нужно) необходимо написать программу:

На стандартный ввод подается 10 целых чисел, разделенных пробелами (числа могут повторяться). Для чтения из стандартного ввода импортирован пакет fmt.

Вам необходимо вычислить результат выполнения функции work для каждого из полученных чисел. Функция work имеет следующий вид:

func work(x int) int

Результаты вычислений , разделенные пробелами, должны быть напечатаны в строку.

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

После завершения работы программы результат выполнения будет дополнен информацией о соблюдении установленного лимита времени выполнения.

Sample Input:
3 1 5 2 3 5 3 0 3 4

Sample Output:
2 0 6 1 2 6 2 -1 2 5 time limit ok
 
C-like:
a := map[int]int{}
for i := 0; i <= 9; i++ {
    var c int
    fmt.Scan(&c)
    if vad, ok := a[c]; ok {
        fmt.Print(vad, " ")
    } else {
        a[c] = work(c)
        fmt.Print(a[c], " ")
    }
}
 
C-like:
var a int
b := make(map[int]int)
for i := 0; i <= 9; i++ {
    fmt.Scan(&a)
    if v, ok := b[a]; ok {
        fmt.Print(v," ")
    } else {
        b[a] = work(a)
        fmt.Print(b[a], " ")
    }
}
 
C-like:
cache := make(map[int]int)

for i := 0; i < 10; i++ {
    var n int
    fmt.Scan(&n)
    if _, ok := cache[n]; !ok {
        cache[n] = work(n)
    }
    fmt.Print(cache[n], " ")       
}
 
Назад
Сверху Снизу