此题我想了很久,可是提交结果是答案错误,有没有大神教我一下下
三月好时节
描述
三月是一个繁花似锦的季节,是一个播种希望的季节。
为此TooY0ung决定对学生们进行开心的测试,TooY0ung觉得学生一定也会非常开心。
TooY0ung随手在黑板上写了n个不一样的数字。
他要求学生可以从中随意选取两个不相同的数字如果两个数字的和是偶数就认定两个数字的和为“开心数”。
现在TooY0ung想知道“开心数”的最大值是多少。
输入
输入包含两行。
第一行输入一个数字n,含义见题目描述。
第二行输入n个不同的数字ai。
输出
输出仅包含一行。
如果可以找到“开心数”则输出“开心数”的最大值。
如果没有“开心数”则输出-1。
输入样例 1
5
1 2 3 4 5
输出样例 1
8
输入样例 2
2
1 2
输出样例 2
-1
提示
关于样例1:
可以得到的和分别有:1+2=3 1+3=4 1+4=5 1+5=6 2+3=5 2+4=6 2+5=7 3+4=7 3+5=8 4+5=9。
其中,“开心数”为:4 6 8。
“开心数”的最大值为8。
关于样例2:
可以得到的和只有:1+2=3
没有“开心数”输出-1。
数据范围:
对于35%的数据,2<=n<=100 0<=ai<=10^9。
对于100%的数据,2<=n<=2*10^5 0<=ai<=10^9。
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,b[150],k,d,j[150],p=0,k=0;
cin>>n;
for(int i=1;i<=n;i++){
cin>>b[i];
}
for(int i=0;i<n;i++){
k+=1;
for(k;k<n;k++){
j[i]=b[i]+b[k];
}
}
for(int i=0;i<n;i++){
if(j[i]%2==0&&j[i]>=j[i+1]) p=j[i];
if(j[i+1]%2==0&&j[i+1]>=j[i]) p=j[i+1];
}
if(p!=0&&p%2==0) cout<<p;
else cout<<-1;
return 0;
}
以上是本人写法思路 勿喷 请纠正 感谢!
#include<bits/stdc++.h>
using namespace std;
int main() {
int n, b[150], j[150], p = 0;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> b[i];
}
for (int i = 1; i <= n; i++) {
for (int l = i+1; l <= n; l++) {
j[p] = b[i] + b[l];
p++;
}
}
int maxHappy = -1;
for (int i = 0; i < p; i++) {
if (j[i] % 2 == 0 && j[i] > maxHappy) {
maxHappy = j[i];
}
}
cout << maxHappy;
return 0;
}
遍历n个整数中的所有两两之偶数和,找出最大值;无偶数之和,输出-1。
用python 的排列组合方法itertools.combinations(),很容易办到——
python 代码
#!/sur/bin/nve python
# coding: utf-8
from itertools import combinations as coms # 载入排列组合方法取别名coms。
def fun(lis):
result = -1 # 输出结果初值。
for (x, y) in coms(lis, 2): # 遍历数列两两之和。
b = x + y
if b%2 == 0 and b > result:
result = b
return result
if __name__ == '__main__':
print('\n输入:')
n, lis = [input().strip() for i in 'ab']
n, lis = int(n), map(int, lis.split())
print(f"\n输出:\n{fun(lis)}") # 函数调用。
def fun(n, lis):
result = -1 # 输出结果初值。
for i in range(n):
for j in range(i+1, n):
b = lis[i] + lis[j]
if b%2 == 0 and b > result:
result = b
return result