ПРИМЕЧАНИЕ. Не пишите решение (т.е. алгоритмическую логику) этой проблемы.
Вчера у Шефа была отличная вечеринка, и он не помнит, как он ее праздновал. Но он нашел у себя на кухне странную бумагу, содержащую n цифр (давайте дадим им индексы от 1 до n и назовем их a1, a2 ... aN).
Шеф вспоминает, что играл в такую игру:
On each step he choose an index x from 1 to n.
For all indices y (y < x) he calculated the difference by = ax - ay.
Then he calculated B1 - sum of all by which are greater than 0 and B2 - sum of all by which are less than 0.
The answer for this step is B1 - B2.
Шеф-повар помнит игру, но забыл ответ. Пожалуйста, помогите ему! Вход
The first line contains two integers n, m denoting the number of digits and number of steps. The second line contains n digits (without spaces) a1, a2, ..., an.
Each of next m lines contains single integer x denoting the index for current step.
Выход
For each of m steps print single number in a line - answer of the step.
Ограничения
1 ≤ n, m ≤ 10^5
0 ≤ ai ≤ 9
1 ≤ x ≤ n
Теперь, как мне ввести n-значный ввод? Я имею в виду, как мне использовать код scanf в этом. Я не знаю точное значение n, поэтому я не могу объявить эти многие переменные. Означает ли это, что я беру однозначный ввод? < / сильный>
3 ответа
Просто берите по одному символу за раз:
int num = getc(stdin) - '0';
Вычитание «0» превращает символ в число. Очевидно, проверка ошибок оставлена как упражнение.
(при условии, что ввод из n цифр представляет собой строку с n символами) Используйте динамическое выделение памяти и настраиваемое средство форматирования scanf
:
int n = 0;
char* digits = NULL;
char format[256];
printf("n=");
scanf("%d", &n);
digits = calloc(n + 1, 1); /* for the terminator 0 to be initialized*/
snprintf(format, 256, "%%%ds", n); /* to not to cause an overflow */
if(NULL == digits)
{
printf("Not enough memory");
exit(1);
}
scanf(format, digits);
printf("%s", digits);
// DO your algorithm here
free(digits);
@ user3424954 прочтите формулировку задачи еще раз, там явно упоминаются входы первой строки n, которые являются длиной числовой строки. Вы можете попробовать использовать * scanf ("% s", имя_массива); *
Похожие вопросы
Новые вопросы
c
C - это язык программирования общего назначения, используемый для системного программирования (ОС и встраиваемых), библиотек, игр и кроссплатформенности. Этот тег следует использовать с общими вопросами, касающимися языка C, как это определено в стандарте ISO 9899 (последняя версия 9899: 2018, если не указано иное, а также для запросов, специфичных для версии, с c89, c99, c11 и т. Д.). C отличается от C ++ и не должен сочетаться с тэгом C ++ без разумной причины.