C - 如何获取不以空格分隔的 N 位数字输入



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

昨天大厨有一个很棒的派对,不记得他庆祝它的方式。但是他在厨房里发现了一张奇怪的纸,里面有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 代码。我 5 知道 n 的确切值,所以我不能声明这么多变量。这是否意味着我采用一位数的输入?

一次只获取一个字符:

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",array_name);*

相关内容

  • 没有找到相关文章

最新更新