社区讨论
请问这样做对吗
灌水区参与者 4已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @lo33b9vh
- 此快照首次捕获于
- 2023/10/24 00:06 2 年前
- 此快照最后确认于
- 2023/10/24 00:06 2 年前
C
题目描述
有n个学生去划船,第i个学生的体重是w[i]。湖面上有好多船,每艘船的安全载重都是S。船的载重量由管理员统一设置。每艘船必须坐两个学生,而且这两个学生的体重的和必须等于S,这样的船才能“平衡”。现在的问题是:管理员应该如何设置S,才能使得有最多的船能够“平衡”。注意:一个学生最多只能乘一艘船。
输入
第一行,一个整数n。1<=n<=50。
第二行,n个整数,第i个整数是w[i],1<=w[i]<=n。
输出
一个整数
样例输入 Copy
5
1 2 3 4 5
样例输出 Copy
2
提示
输入/输出例子2
输入:
8
6 6 6 6 6 6 8 8
输出:
3
输入/输出例子3
输入:
8
1 2 2 1 2 1 1 2
输出:
4
输入/输出例子4
输入:
3
1 3 3
输出:
1
输入/输出例子5
输入:
6
1 1 3 4 2 2
输出:
2
样例解释
【输入样例1的解释】
可以把S设置为6,那么第1个学生和第5个学生的体重和等于S,第2学生和第4个学生的体重和等于S,这样有2艘船可以“平衡”。
CPP#include<bits/stdc++.h>
#include <iostream>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int n,a[505],b[505],s,k,ans=0,j=0,i;
int main(int argc, char** argv){
scanf("%d",&n);
for (i=0;i<n;i++){
scanf("%d",&a[i]);
b[i]=a[i];
}
for (s=2;s<=100;s++){
for (i=0;i<n;i++){
for (k=i+1;k<=n;k++){
if (b[i]+b[k]==s){
ans++;
b[i]=1000;
b[k]=1000;
}
}
}
j=max(ans,j);ans=0;
for (i=0;i<n;i++){b[i]=a[i]; }
}
printf("%d",j);
return 0;
}
回复
共 5 条回复,欢迎继续交流。
正在加载回复...