PTA |1047 编程团体赛 分数 20 水题

211 阅读1分钟

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;
}

image.png 写在里面可以全部过:

#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;
}

image.png

原因

将输入语句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;
}

image.png