1、幼儿园小朋友站成一列,按位置1、2、3....顺序编号,每个小朋友都拿了若干糖果,请找出3个小朋友,他们拿着相同颜色的糖果,且他们拿的糖果总数不少于其他任何小朋友(拿相同颜色的糖果)的糖果总数,如果存在多组这样的小朋友,则找出位置编号最小的小朋友所在的组。
设置的前提条件:
(1)每个小朋友最少拿一颗糖,最多拿1024颗糖,且只拿一种颜色的糖果;不存在两个小朋友拿相同颜色相同树木的糖果。
(2)糖果颜色只有2种:1为红色,2为蓝色。
输出描述:
拿相同颜色且糖果总数最多的3位小朋友位置编号,糖果颜色及总数;第一行为3个小朋友位置编号(糖果数从小到大对应的位置编号) ,第二行为糖果颜色,第三行为糖果总数。
如果没有满足条件的小朋友,则输出字符串“null”。
示例1:
输入
6
2 2
2 1
3 2
5 2
3 1
7 2
输出
3 4 6
2
15
#include <bits/stdc++.h> using namespace std; //建立对象:孩子{糖果个数,颜色,所在位置} struct kid{ int num; int color; int s; }; //定义一个布尔类型的函数:比较大小 bool compare(kid a,kid b){ return a.num>b.num; } int main(){ int n; cin >> n; if(n<3){ cout << "null"; return 0; } //建立一个kid类型的数组:含有上面定义的kid的三个属性 //将所有的小朋友按照糖果颜色分为两队 vector<kid>num_1; vector<kid>num_1; int i=1; while(i<=n){ int num,clr; cin >> num >> clr; if(clr==1){ kid k; k.num=num; k.color=clr; k.s=i; num_1.push_back(k); } if(clr==2){ kid k; k.num=num; k.color=clr; k.s=i; num_2.push_back(k); } i++; } } if(num_1.size()<3 && num_2.size()<3){ coun << "null"; return 0; } //上面已经定义compare,在这里直接使用,按照糖果数目对数组由大到小排序 sort(num_1.begin(),num_1.end(),compare); sort(num_2.begin(),num_2.end(),compare); //前三个是一组中的最大值,相加 int t_1=num_1[0].num+num_1[1].num+num_1[2].num; int t_2=num_2[0].num+num_2[1].num+num_2[2].num; if(t_1>t_2){ cout << num_1[2].s <<" " << num_1[1].s << " " << num_1[0].s << endl; cout << num_1[2].color << endl; cout << t_1; }else if(t_1<t_2){ cout << num_2[2].s <<" " << num_2[1].s << " " << num_2[0].s << endl; cout << num_2[2].color << endl; cout << t_2; }else{ int min_s=1024; int flsg=0; for(int i=0;i<3;i++){ if(num_1[i].s<min_s){ min_s=i+1; } } for(int i=0;i<3;i++){ if(num_2[i].s<min_s){ min_s=i+1; flag=1; } } if(flag==0){ cout << num_1[2].s <<" "<<num_1[1].s<<" "<<num_1[0].s<<endl; cout<<t_1; }else{ cout << num_2[2].s <<" "<<num_2[1].s<<" "<<num_2[0].s<<endl; cout<<t_2; } } return 0;