链接:https://www.luogu.com.cn/problem/P5728
题目:有 N(N≤1000) 名同学参加了期末考试,并且获得了每名同学的信息:语文、数学、英语成绩。如果某对学生 <i,j> 的每一科成绩的分差都不大于 5,且总分分差不大于 10,那么这对学生就是“旗鼓相当的对手”。现在想知道这些同学中,有几对“旗鼓相当的对手”?同样一个人可能会和其他好几名同学结对。
定义一个结构体储存学生分数:
class faction{
int chinese;
int math;
int english;
int sum; //总分
}
绝对值函数:
Math.abs(变量)
代码如下:
import java.util.Scanner;
class faction{
int chinese;
int math;
int english;
int sum;
}
public class Main {
public static void main(String[] args) {
Scanner s= new Scanner(System.in);
int n=s.nextInt();
int num=0;
faction[] a=new faction[1001];
for(int i=1;i<=n;i++)
{
faction fea=new faction(); //定义一个临时结构体
fea.chinese=s.nextInt();
fea.math=s.nextInt();
fea.english=s.nextInt();
fea.sum=fea.chinese+fea.math+fea.english;
a[i]=fea; //将数据赋值给结构体数组
fea=null;
}
for(int i=2;i<=n;i++)
for(int j=1;j<i;j++)
{
if(Math.abs(a[i].chinese-a[j].chinese)<=5&&Math.abs(a[i].math-a[j].math)<=5&&Math.abs(a[i].english-a[j].english)<=5)
{
if(Math.abs(a[i].sum-a[j].sum)<=10)
num++;
}
}
System.out.println(num);
}
}
上面涉及到了结构体数组的输入问题,如果是下面这样是不行的:
faction[] a=new faction[1001];
//只声明了一个有长度的数组,对象没有初始化,所以为空
for(int i=1;i<=n;i++)
{
a[i].chinese=s.nextInt();
a[i].math=s.nextInt();
a[i].english=s.nextInt();
}