0
已解决
曹博扬
初级天翼
初级天翼
3685为啥10分?
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<string>
#include<iomanip>
#include<cmath>
#include<sstream>
using namespace std;
int n,a[2005],c,s;
int main(){
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+n+1);
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){
s=a[i]+a[j];
for(int k=j+1;k<=n;k++){
if(s==a[k])
c++;
else
continue;
}
}
}
cout<<c;
return 0;
}
曹博扬在2020-11-01 20:53:58追加了内容
3685 力量对比(power)经验值:400
不许抄袭,一旦发现,直接清空经验!
题目描述 Description
在拔河比赛中,小胖的力量特别大,一人的力量能抵得过两人的力量,凭借着小胖的出色发挥,他所在的红队最终赢得了胜利。在拔河比赛中,这样的小胖越多越好啊,而体育老师想知道有多少位这样的小胖呢。假如我们给出所有学生的力量值,且任意两位学生的力量是不同的。如何能快速知道有多少位这样的小胖呢。
输入描述 Input Description
输入共两行,第一行是一个正整数 n,表示共有 n位同学。
接下来一行为由空格分割的n个正整数,分别表示每一位同学的力量值。
输出描述 Output Description
只有一个正整数,为满足条件的数目。
样例输入 Sample Input
4 3 2 1 5
样例输出 Sample Output
2
数据范围及提示 Data Size & Hint
样例说明:因为3=1+2;5=2+3,所以输出为2。
数据范围:1≤n≤1000,0<序列中每个数≤1000
0
已采纳
陈则霖
资深光能
资深光能
- for(int i=1;i<=n-1;i++)
- {
- for(int j=i+1;j<=n;j++)
- {
- if(b[a[i]+a[j]]!=0)
- {
- m++;
- b[a[i]+a[j]]=0;
- }
- }
- }
- 核心
1
陈曦
资深天翼
资深天翼
你要思路(A)还是代码(B)?
请选择😀......
~~~~~~~~~~~~~~~~~~~~~~~
好了!下边进入正题!
首先,说思路:
这题用枚举可能会超时,所以用 桶 比较保险。
首先,输入a[i],b[a[i]]++;
双重循环遍历:
如果 a[i]+a[j](用 tmp 存起来) 这个“小胖”存在,
计数器加一,当前找到的 ”小胖“ 归 0(放重复)
特别提示:这题的桶数组一定要定义大一些,因为小胖的体重会是其他两个人的两倍。
然后,是代码 (核心代码的伪代码):
循环(1到n){
输入a[i]
b[a[i]]加一
}
循环(1 到 n){
循环(i+1 到 n){
整形 tmp 等于 a[i]加a[j]的和;
如果(b[tmp]){
计数器加一;
b[tmp]归0;
}
}
}
(输出计数器)
0
0
0
0
邹昊轩
资深光能
资深光能
0