

为什么输入之后数据会自己改了呢 就算中间没有进行任何操作也会改变 全局变量不应该开始的时候就是0 不用初始化的吗 希望dl帮忙看看


为什么输入之后数据会自己改了呢 就算中间没有进行任何操作也会改变 全局变量不应该开始的时候就是0 不用初始化的吗 希望dl帮忙看看
关注让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言问题描述: 对于下面这段代码,为什么输入之后数据会自己改了呢?就算中间没有进行任何操作也会改变。全局变量不应该开始的时候就是0,不用初始化的吗?希望dl帮忙看看。
#include<bits/stdc++.h>
using namespace std;
int m,n,ans,sz[100010];
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%d",&sz[i]);
ans=max(ans,sz[i]);
}
int l=ans,r=ans+m;
int cnt=0,k=0;
for(int i=1;i<=n;i++){
if(sz[i]>r){
printf("-1");
return 0;
}
else if(sz[i]>r-k){
cnt++;
k=sz[i];
}
if(cnt>m){
printf("-1");
return 0;
}
}
printf("%d",ans);
return 0;
}
问题分析: 根据代码,首先读入两个整数n和m,再循环读入n个数到数组sz中。在第一个循环中,作者计算ans=max(ans,sz[i]),即找到sz数组中的最大值,存储在ans中。接下来,根据ans和m计算出l和r两个变量,l等于ans,r等于ans加上m。在第二个循环中,作者判断sz[i]是否大于r或者大于r-k,如果是,则输出-1并结束程序。如果cnt大于m,则同样输出-1并结束程序。 根据以上分析,可以认为代码逻辑没有问题。但是问题可能出在输入上。根据问题描述中的截图可以看出,输入的数据格式不正确,可能导致程序读取到了错误的值,导致程序出错。因此,需要检查一下输入数据的格式是否正确。 解决方案: 建议调整代码,增加针对输入格式错误的处理,如下所示:
#include<bits/stdc++.h>
using namespace std;
int m,n,ans,sz[100010];
int main(){
if(scanf("%d%d",&n,&m) != 2) {
printf("Invalid input format!");
return 1;
}
for(int i=1;i<=n;i++){
if(scanf("%d",&sz[i]) != 1) {
printf("Invalid input format!");
return 1;
}
ans=max(ans,sz[i]);
}
int l=ans,r=ans+m;
int cnt=0,k=0;
for(int i=1;i<=n;i++){
if(sz[i]>r){
printf("-1");
return 0;
}
else if(sz[i]>r-k){
cnt++;
k=sz[i];
}
if(cnt>m){
printf("-1");
return 0;
}
}
printf("%d",ans);
return 0;
}
上述代码中,增加了针对输入格式错误的处理。当scanf函数返回值不等于参数2时,即1对应读入一个值,2对应读入两个值,程序会输出"Invalid input format!"并返回1,表示程序异常结束。 参考资料: CSDN论坛:为什么输入之后数据会自己改了呢? C++中scanf函数用法总结