c-if.else条件是我的代码只在代码块上工作,codeforces说的是错误的ans



这是代码,条件不起作用,我不明白为什么。。。当x和y的值相同时,vscode和其他在线判断和编译器会说不,但在代码块上会说是。

#include <stdio.h>
int main() {
int i, n, j;
scanf("%d", &n);
long long int a[n], x = 0, y = 0;
for (i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
for (i = n - 1, j = 1; i >= 0; i--, j = j * 10) {
y = y + a[i] * j;
}
printf("%d ", y);
for (i = 0, j = 1; i < n; i++, j = j * 10) {
x = x + a[i] * j;
}
printf("%d ", x);
if (x == y) {
printf("YES");
}
else {
printf("NO");
}
return 0;
}

首先,您的代码中有一个小问题,这一行是:

scanf("%d",&a[i]);

名为a的数组属于long long int类型,要扫描其中的任何值,请使用:

scanf(" %lld",&a[i]);

其中,%lld表示您正在扫描long long int值,%lld之前还有一个前导空格,可以忽略前导空格(如果有的话((不是强制性的,在这种情况下没有用处,但在扫描char时非常有用(。

第二件事是要输出的假定答案是NO而不是YES

这是由于代码的逻辑,看看你是如何计算x:的

for(i=0,j=1; i<n; i++,j=j*10)
{
x=x+(a[i]*j);
}

x是通过按从a[0]a[n-1]的顺序连接数组中的整数来计算的

而在用于计算y的值的循环中:

for(i=n-1,j=1; i>=0; i--,j=j*10)
{
y=y+(a[i]*j);
}

y是通过按从a[n-1]a[0]的顺序连接数组中的整数来计算的

这与CCD_ 11不同。

要更正它,您可以将y的for循环更改为:

for(i=0,j=1; i<n; i++,j=j*10)
{
y=y+(a[i]*j);
}

或者您可以修改x的for循环。

这应该能解决你的问题。

最新更新