如何取n个数字输入,这些输入不是空格分隔的

时间:2014-04-07 12:51:48

标签: c scanf

注意:请不要为此问题编写解决方案(即算法逻辑)。

昨天厨师举办了一场精彩派对,不记得他庆祝的方式。但他在厨房里发现了一张包含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 个答案:

答案 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); *