题目:https://pintia.cn/problem-sets/994805260223102976/exam/problems/994805311146147840
经过千辛万苦终于拿满了,但是代码行数太多了233,望各位能给个优化的意见。
#include
int main()
{
int N,i,A[6]={0},flag=1,count=0,temp=0;
scanf("%d",&N);
int num[N];
for(i=0;iscanf("%d",&num[i]);
}
for(i=0;iswitch(num[i] % 5)
{
case 0:
{
if(num[i] % 2 == 0)
A[1] += num[i];
break;
}
case 1:
{
A[2] += flag*num[i];
flag=-flag;
temp=1;
break;
}
case 2:
{
A[3]++;
break;
}
case 3:
{
A[4] += num[i];
count++;
break;
}
case 4:
{
if(num[i]>A[5])
A[5]=num[i];
break;
}
}
}
for(i=1;i<6;i++)
{
if(i != 1)
printf(" ");
switch(i)
{
case 1:
case 3:
case 4:
case 5:
{
if(A[i] != 0)
{
if(i==4)
{
printf("%.1f",(double)A[4]/count);
break;
}
printf("%d",A[i]);
}
else
printf("N");
break;
}
case 2:
{
if(temp == 1)
printf("%d",A[2]);
else
printf("N");
break;
}
}
}
return 0;
}
减少一次循环,其他没什么好优化的,试试:
#include <stdio.h>
#define N 1000
int main()
{
int n, i, A[6] = { 0 }, num[N] = { 0 }, flag = 1, count = 0, temp = 0;
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%d", &num[i]);
switch (num[i] % 5) {
case 0: {
if (num[i] % 2 == 0)
A[1] += num[i];
break;
}
case 1: {
A[2] += flag * num[i];
flag = -flag;
temp = 1;
break;
}
case 2: {
A[3]++;
break;
}
case 3: {
A[4] += num[i];
count++;
break;
}
case 4: {
if (num[i] > A[5])
A[5] = num[i];
break;
}
}
}
for (i = 1; i < 6; i++)
{
if (i != 1)
printf(" ");
switch (i)
{
case 1:
case 3:
case 4:
case 5:
{
if (A[i] != 0)
{
if (i == 4)
{
printf("%.1f", (double)A[4] / count);
break;
}
printf("%d", A[i]);
}
else
printf("N");
break;
}
case 2:
{
if (temp == 1)
printf("%d", A[2]);
else
printf("N");
break;
}
}
}
return 0;
}