Черный квадрат, превышено ограничение времени - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, помогите, пожалуйста. При тесте кода, превышается ограничение времени. Вот сама задача: Совсем недавно очень умный студент Юра решил, что сидеть на парах скучно, и скачал на свой супер крутой сенсорный телефон игру «Черный квадрат». В игре экран телефона разделен на четыре вертикальные полоски. Каждую секунду на какой-то из полосок появляется черный квадратик, за эту секунду Юра по правилам игры должен нажать на соответствующую полоску, чтобы квадратик пропал. Поскольку Юра не только умный студент, а еще и ленивый, он посчитал, что тратит ровно ai калорий чтобы нажать на i-ю полоску. Вам дана строка s, описывающая процесс игры, а также числа a1, a2, a3, a4. Посчитайте, сколько калорий потратит Юра, чтобы уничтожить все квадратики? Входные данные В первой строке через пробел записано четыре целых числа a1, a2, a3, a4 (0 ≤ a1, a2, a3, a4 ≤ 104). Во второй строке записана строка s (1 ≤ |s| ≤ 105), где і-й символ строки равен «1», если на i-й секунде игры квадратик появится на первой полоске, «2» — если на второй, «3» — если на третьей, «4» — на четвертой. Выходные данные Выведите единственное целое число — суммарное количество калорий, которые потратит Юра. Примеры входные данные 1 2 3 4 123214 выходные данные 13 входные данные 1 5 3 2 11221 выходные данные 13 Вот код:
#include <stdio.h> 
int main()
{ 
    int a1, a2, a3, a4, i, sum = 0;
    char s[100];
    scanf ("%d %d %d %d", &a1, &a2, &a3, &a4);
    scanf ("%s", &s);
    for (i = 0; s[i] != '\0'; i++)
    {
        if (s[i] == '1')
        {
            sum = sum + 1 * a1;
        }
        else if (s[i] == '2')
        {
            sum = sum + 1 * a2;
        }
        else if (s[i] == '3')
        {
            sum = sum + 1 * a3;
        }
        else if (s[i] == '4')
        {
            sum = sum + 1 * a4;
        }
    }
    printf ("%d", sum);
    return 0; 
}

Решение задачи: «Черный квадрат, превышено ограничение времени»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    int a[4];
    char s[100];
    scanf ("%d %d %d %d", &a[0], &a[1], &a[2], &a[3]);
    scanf ("%s", s);
    int sum = 0;
    for(char *p = s; *p; p++) {
        sum += a[*p - '1'];
    }
    printf ("%d", sum);
    return 0;
}

Объяснение кода листинга программы

  1. Объявлены две массивы: a[4] и s[100]
  2. С помощью функции scanf происходит чтение четырех целых чисел в массив a и одной строки в массив s
  3. Создается переменная sum и инициализируется нулем
  4. Происходит цикл по всем символам строки s, при этом к каждому символу прибавляется значение соответствующего элемента массива a
  5. В конце цикла выводится значение переменной sum
  6. Возвращается ноль, что означает успешный конец работы программы

Оцени полезность:

7   голосов , оценка 3.429 из 5
Похожие ответы