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)