PTA | 程序设计类实验辅助教学平台 (pintia.cn)
a,b,c的读取写在外面只能得一部分分:
#include<iostream>
using namespace std;
const int N=1e4+10;
int arr[N];
int main()
{
int n=0;cin>>n;
int a=0,b=0,c=0;
for(int i=0;i<n;++i)
{
cin>>a>>b>>c;
}
int Max=0,index=0;
for(int i=0;i<n;++i)
{
arr[a]+=c;
if(arr[a]>Max)
{
Max=arr[a];
index=a;
}
}
cout<<index<<" "<<Max<<endl;
return 0;
}
写在里面可以全部过:
#include<iostream>
using namespace std;
const int N=1e4+10;
int arr[N];
int main()
{
int n=0;cin>>n;
int a=0,b=0,c=0;
int Max=0,index=0;
while(n--)
{
cin>>a>>b>>c;
arr[a]+=c;
if(arr[a]>Max)
{
Max=arr[a];
index=a;
}
}
cout<<index<<" "<<Max<<endl;
return 0;
}
原因
将输入语句cin>>a>>b>>c;放在了循环中,这意味着在每次循环迭代时,都会覆盖之前的a、b和c的值。因此,当您在后面的循环中使用a和c时,它们的值实际上是最后一次循环迭代时的值。这导致了错误的结果。
修正
正确的方法是将输入语句放在第一个循环中,以便在每次迭代时都能正确地读取新的a、b和c的值。这样,arr数组中的值将根据每次迭代中新的a和c值进行更新,从而得到正确的结果。
#include<iostream>
using namespace std;
const int N=1e4+10;
int arr[N];
int main()
{
int n=0;cin>>n;
int a=0,b=0,c=0;
for(int i=0;i<n;++i)
{
cin>>a>>b>>c;
arr[a]+=c;
}
int Max=0,index=0;
for(int i=0;i<N;++i)
{
if(arr[i]>Max)
{
Max=arr[i];
index=i;
}
}
cout<<index<<" "<<Max<<endl;
return 0;
}