5 a 50 b 23 c 42 d 10 k 51这里输出的最大值不应该是51吗,为什么我输出却是50,而且只有我改最后一组数据为51的时候,输出的才是50,改前面的为51,输出的就是51

#include
#define int long long
signed main(){
char w[5005];
int n,k[5005];
int max=0,ans=0;
scanf("%lld",&n);
for(int i=0;i
scanf("%c %lld\n",&w[i],&k[i]);
}
for(int i=0;i
if(k[i]>=max)max=k[i];
}
for(int i=0;i
if((int)w[i]==97&&k[i]==max)ans++;
}
printf("%lld",max);
if(ans==1)printf("Yes");
else printf("No");
}

scanf("%c %lld\n",&w[i],&k[i]);后面加个getchar();

这就说明算法思路没有问题,数据读取方面出现问题,如果输入时为字符串且含空格,就需要像楼上所说的那样,使用getchar()方法删除空格,因为空格也是一个字符。

因为5后面有个空格,会被%c读取,scanf("%lld",&n);改成scanf("%lld",&n);getchar();

修改如下,供参考:

#include <stdio.h>
#define int long long
signed main() {
    char w[5005];
    int n, k[5005];
    int max = 0, ans = 0;
    scanf("%lld", &n);
    for (int i = 0; i < n; i++) {
        scanf(" %c %lld", &w[i], &k[i]);
        //scanf("%c %lld\n",&w[i],&k[i]);
    }
    for (int i = 0; i < n; i++) {
        if (k[i] >= max)max = k[i];
    }
    for (int i = 0; i < n; i++) {
        if ((int)w[i] == 97 && k[i] == max)ans++;
    }
    printf("%lld", max);
    if (ans == 1)printf("Yes");
    else         printf("No");
}