列表

详情


NC24655. wnm的奇数和

描述

给你一组数据,取出任意个数,使得他们的和相加最大且为奇数。

输入描述

第一行输入一个数T,表示有T组数据,每组数据首先输入一个整数N,表示接下来有N个整数:a1,a2,...,an。

输出描述

输出一个整数,后带一个空行,表示最大的奇数和。(题目保证,一定会有最大的奇数和)

示例1

输入:

1
4
-2 2 -3 1

输出:

3

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C 解法, 执行用时: 2ms, 内存消耗: 276K, 提交时间: 2023-04-05 17:32:04

#include<stdio.h>
#include <math.h>
int main()
{int t;
scanf("%d",&t);
while(t--)
{int n,s=0,min=10000;
scanf("%d",&n);
int a[10001],i,j;
for(i=0;i<n;i++)
{scanf("%d",&a[i]);}
for(i=n-1;i>=0;i--)
if(a[i]>0)
    s+=a[i];
else continue;
if(s%2!=0)
 printf("%d\n",s);
 else {for(i=n-1;i>=0;i--)
     if(min>abs(a[i])&&abs(a[i])%2!=0)
         min=abs(a[i]);
printf("%d\n",s-min);} }
 return 0;}

C++14(g++5.4) 解法, 执行用时: 2ms, 内存消耗: 480K, 提交时间: 2020-06-25 16:19:38

#include <stdio.h>
#include <stdlib.h>
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++){
	int x;
	cin>>x;
	int a[x],min=10000000,sum=0;
	for(int j=0;j<x;j++){
		cin>>a[j];
		if(a[j]>=0){
			sum+=a[j];
			}
			else{
				a[j]=-a[j];
			}
		if(a[j]%2!=0&&a[j]<min){
		min=a[j];
		}
	}
	if(sum%2==0){
		sum-=min;
	}
	printf("%d\n",sum);
}
} 

C++(clang++ 11.0.1) 解法, 执行用时: 3ms, 内存消耗: 468K, 提交时间: 2023-04-03 20:19:25

#include<iostream>
using namespace std;
int main() {
	int T;
	cin >> T;
	int n;
	int a[1001];

	while (T--) {
		cin >> n;
		int s = 0;
		int b = -1000;
		for (int i = 0; i < n; i++) {
			cin >> a[i];
			if (a[i] > 0) s += a[i];
			if (a[i]<0 && a[i]>b && (a[i] % 2) != 0) b = a[i];
		}
		if (s % 2 == 0) s += b;
		cout << s << endl;
	}
	return 0;
}

C++(g++ 7.5.0) 解法, 执行用时: 3ms, 内存消耗: 384K, 提交时间: 2023-04-02 21:21:29

#include <iostream>
using namespace std;
int main() {
	int T;
	cin>>T;
	int n;
	int a[1001];
	 
	while(T--){
		cin>>n;
	int s=0;
		int b=-1000;
		for(int i=0;i<n;i++){
			cin>>a[i];
			if(a[i]>0) s+=a[i];
			if(a[i]<0&&a[i]>b&&(a[i]%2)!=0) b=a[i];
		}
		if(s%2==0) s+=b;
		cout<<s<<endl;
	}
	return 0;
}

Python3(3.5.2) 解法, 执行用时: 25ms, 内存消耗: 3424K, 提交时间: 2020-05-03 01:28:51

for _ in range(int(input())):
    n = int(input())
    a = list(map(int, input().split()))
    sum = 0
    for i in a:
        if i > 0:sum += i
    if sum & 1==0:
        a=sorted(a, key=abs)
        for i in a:
            if i&1:
                sum-=abs(i)
                break
    print(sum)

上一题