代码1(c++)
#include <stdio.h>
int main() {
int n;
scanf("%d", &n);
long a[5]= {0, 0, 0, 0, 0};
int seq1 = 1;
long sum2 = 0L;
double avg3 = 0.0;
for(int i=0; i<n; i++) {
int t;
scanf("%d", &t);
int remain = t%5;
switch(remain) {
case 0:
if(t%2==0) {
a[0] = a[0] + t;
}
break;
case 1:
if(seq1%2) {
sum2 += t;
} else {
sum2 -= t;
}
a[1]++;
seq1++;
break;
case 2:
a[2]++;
break;
case 3:
a[3]++;
avg3 += t;
break;
case 4:
if(t>a[4]) {
a[4] = t;
}
break;
}
}
if(a[0]==0) {
printf("N");
} else {
printf("%d", a[0]);
}
for(int i=1; i<5; i++) {
if(i==3 && a[i]!=0) {
printf(" %.1lf", avg3/(double)a[3]);
}
else if(i==1 && a[i]!=0) {
printf(" %ld", sum2);
} else {
if(a[i]==0) {
printf(" N");
} else {
printf(" %d", a[i]);
}
}
}
return 0;
}
注解1
(1)练习switch case的使用
switch(变量名) {
case 0: break;
case 1: break;
default:
}
(2) A2= 将被 5 除后余 1 的数字按给出顺序进行交错求和,此处有一个坑点:a1-a2+a3-a4…,有可能最后得到的结果是0!所以初始化为0就不太合适。
优化办法:a数组该元素在初始化时,将其赋值为-1或其他不可能出现的数。
代码2(c++,vector版本)
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n;
cin>>n;
vector< vector<int> > v(5);
for(int i=0; i<n; i++){
int t;
cin>>t;
if(t%5==0){
if(t%2==0){
v[0].push_back(t);
}
}
else{
v[t%5].push_back(t);
}
}
//reminder = 0
int ans = 0;
for(int i=0; i<v[0].size(); i++){
if(v[0][i]%2==0){
ans += v[0][i];
}
}
if(v[0].size()==0){
printf("N");
}
else{
printf("%d", ans);
}
//reminder = 1
ans = 0;
for(int i=0; i<v[1].size(); i++){
if(i%2==0){
ans += v[1][i];
}
else{
ans -= v[1][i];
}
}
if(v[1].size()==0){
printf(" N");
}
else{
printf(" %d", ans);
}
//reminder = 2
if(v[2].size()==0){
printf(" N");
}
else{
printf(" %d", v[2].size());
}
//reminder = 3
double re = 0.0;
for(int i=0; i<v[3].size(); i++){
re += v[3][i];
}
if(v[3].size()==0){
printf(" N");
}
else{
printf(" %.1lf", re/(double)v[3].size());
}
//reminder = 4
ans = -1;
for(int i=0; i<v[4].size(); i++){
if(v[4][i]>ans){
ans = v[4][i];
}
}
if(v[4].size()==0){
printf(" N");
}
else{
printf(" %d", ans);
}
printf("\n");
return 0;
}
注解2
(1)采用vector的方法,要学会用二重的vector。
声明: vector< vector > v(5);
相当于二维数组(5行,不指定列)。使用时,v[i].push_back(num);
v[i].at(index);
(2)不足:代码可以进一步优化,变短!