P5728旗鼓相当的队手C语言

题目来源:

 【入门4】数组 - 题单 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

  P5728 【深基5.例5】旗鼓相当的对手 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

Question:

现有 $N$ 名同学参加了期末考试,并且获得了每名同学的信息:语文、数学、英语成绩(均为不超过 $150$ 的自然数)。如果某对学生〈𝑖,𝑗〉的每一科成绩的分差都不大于 5,且总分分差不大于 10,那么这对学生就是“旗鼓相当的对手”。现在想知道这些同学中,有几对“旗鼓相当的对手”?同样一个人可能会和其他好几名同学结对。

Example:

输入
3
90 90 90
85 95 90
80 100 91

输出
2

 Way:

使用二维数组

1.先开辟一个足够大的空间,接收n个人的成绩

2.把每名学生的总成绩存到一个一维数组里

3.判断两名同学是否符合条件:

这里我们可能一开始只能想到用一层for循环,然后让i 与 i+1相减作比较,但是这只能比较两个相邻的学生的成绩;所以我们要使用两层循环,相当于小学学的数有多少个组合方式的题,画图理解一下

4.别忘记用abs()绝对值函数

 

#include<stdio.h>
#include<math.h>
int main(){
	int n;
	scanf("%d",&n);
	int score[1001][3]={0};
	int i,j,cn=0;
	//录入学生信息 
	for(i=0;i<n;i++){
		scanf("%d%d%d",&score[i][0],&score[i][1],&score[i][2]);
		
	}
	int sum[1001]={0};
		for(i=0;i<n;i++){
			for(j=0;j<3;j++){
				sum[i]+=score[i][j];
		}
	}
	//如何排序 
	//让第一个跟他后面的所有比
	//让第二个和他后面的所有比 
	//所以我们使用双层for循环
	for(i=0;i<n;i++){
		for(j=i+1;j<n;j++){//和后面的人比 
			int a=abs(score[i][1]-score[j][1]);
			int b=abs(score[i][2]-score[j][2]);
			int c=abs(score[i][0]-score[j][0]);//第一颗成绩
			int x=abs(sum[i]-sum[j]);
			
			if(a<=5&&b<=5&&c<=5&&x<=10)
				cn++;  
		}
	} 
	
	printf("%d",cn);

	return 0;
} 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值