注意:请不要为此问题编写解决方案(即算法逻辑)。
昨天厨师举办了一场精彩派对,不记得他庆祝的方式。但他在厨房里发现了一张包含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的确切值,所以我不能声明那么多变量。这意味着我只取一个数字输入吗
答案 0 :(得分:3)
一次只能获得一个角色:
int num = getc(stdin) - '0';
减去&#39; 0&#39;是将一个字符变成一个数字。显然,错误检查是一种练习。
答案 1 :(得分: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);
答案 2 :(得分:0)
@ user3424954再次阅读问题陈述,明确提到第一行输入n,即数字串的长度。 你可以尝试使用 的 *的scanf(&#34;%S&#34;,ARRAY_NAME); * 强>