我正在尝试这个问题https://www.codechef.com/problems/LOSTMAX 厨师有一个盒子,里面排列着 N 个数字:A1,A2,...,AN。他的前面还有数字N,所以他知道里面有多少个数字。也就是说,盒子实际上包含 N+1 个数字。但是由于正在进行的 IOI,他兴奋不已,他开始拿着口袋里的盒子跳舞,N+1 的数字就乱七八糟了。所以现在,他已经不知道N+1个数中哪个是N,哪些是实际数了
他想找出N个数中最大的一个。帮他找到这个。
输入 输入的第一行包含一个整数 T,表示测试用例的数量。每个测试用例的描述如下。 接下来的 T 行中的每一行将包含 N 和 N 个数字,但不能保证 N 是第一个数字。 输出 对于每个测试用例,输出一行包含该测试用例中 N 个数字的最大值。
约束 1≤T≤100 1≤N≤50 1≤艾≤109 样本 1: 输入 输出 3个 1 2 1 3 1 2 8 1 5 1 4 3 2 1个 8个 4个 解释: 测试用例 1:
N = 2,数字为 {1, 1}。这 2 个数字中的最大值为 1,因此输出为 1.
测试案例2:
N = 3,数字为{1, 2, 8}。这 3 个数字中的最大值是 8,因此输出是 8.
测试案例3:
N = 5,数字为{1, 1, 4, 3, 2}。这 5 个数字中最大的是 4,因此输出是 4.
#include <bits/stdc++.h>
using namespace std;
long long int Stringtonum(string s)
{ long long int d=0;
for(int i=0;i<s.length();i++)
{
d=d*10+((int)s[i]-48);
}
return d;
}
int num_elements(string s)
{
int c=0;
for(int i=0;i<s.length();i++)
{
if(s[i]==' ')
c++;
}
return c;
}
void carr(int n,string s,long long int *a)
{
string d="";int j=0;
for(int i=0;i<s.length();i++)
{
if(s[i]!=' ')
{
d=d+s[i];
}
else
{
int x=Stringtonum(d);
a[j]=x;
j++;
d="";
}
}
}
int main() {
int t;
cin>>t;
while(t--)
{
string s;
getline(cin>>ws,s);
s=s+" ";
int n=num_elements(s);
long long int a[n];
carr(n,s,a);
for(int i=0;i<n;i++)
{
if(a[i]==(n-1))
a[i]=0;
}
sort(a,a+n);
cout<<a[n-1]<<endl;
}
return 0;
}
一个测试用例给出写答案而另一个给出错误答案 你能帮助其他人提交的东西有什么问题正在实施相同的算法吗?