题目描述
让你构造一个结构体,包含(int a,int b,int c). 现有 n 个结构体,请输出满足以下条件的结构体的编号:它的 a,b,c 都是 n 个结构体中最大的. 如果不存在则输出 −1.
输入格式
第一行一个正整数 n 表示结构体数量. 接下来 n 行每行 3 个数,描述一个结构体
输出格式
一行若干个整数,表示编号或 −1.
样例输入
3
1 1 1
3 2 2
3 3 3
样例输出
3
做出来全WA呀
#include<iostream>
using namespace std;
struct test
{
int a;
int b;
int c;
};
int main()
{
int n;
cin >> n;
struct test t[n];
for(int j=0; j<n; j++)
cin >>t[j].a>>t[j].b>>t[j].c;
int maxa=t[0].a;
int maxb=t[0].b;
int maxc=t[0].c;
for(int j=1; j<n; j++)
{
if(t[j].a>maxa) maxa=t[j].a;
if(t[j].b>maxb) maxb=t[j].b;
if(t[j].c>maxc) maxc=t[j].c;
}
for(int j=0; j<n; j++)
if(t[j].a==maxa&&t[j].b==maxb&&t[j].c==maxc)
{
cout <<j+1;
return 1;
}
cout << -1;
return -1;
}
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
struct S
{
int a;
int b;
int c;
};
istream &operator>>(istream &is, S &s)
{
is >> s.a >> s.b >> s.c;
return is;
}
int main()
{
int n;
cin >> n;
vector<S> s(n);
for (int i = 0; i < n; i++)
cin >> s[i];
bool found = false;
for (auto itr = s.begin(); itr != s.end(); ++itr)
{
if (all_of(s.begin(), s.end(), [itr](const auto &s)
{ return itr->a >= s.a && itr->b >= s.b && itr->c >= s.c; }))
{
cout << distance(s.begin(), itr) + 1 << ' ';
found = true;
}
}
if (!found)
cout << -1;
return 0;
}
$ g++ -Wall main.cpp
$ ./a.out
3
1 1 1
3 2 2
3 3 3
3
$ ./a.out
3
1 2 3
2 3 1
3 1 2
-1
$ ./a.out
3
1 1 1
2 2 2
2 2 2
2 3