试图转专业的kk 2022-10-08 16:10 采纳率: 42.9%
浏览 31
已结题

PAT-B1012代码优化

题目:https://pintia.cn/problem-sets/994805260223102976/exam/problems/994805311146147840
经过千辛万苦终于拿满了,但是代码行数太多了233,望各位能给个优化的意见。


#include <stdio.h>
int main()
{
    int N,i,A[6]={0},flag=1,count=0,temp=0;
    scanf("%d",&N);
    int num[N];
    for(i=0;i<N;i++)
    {
        scanf("%d",&num[i]);
    }
    for(i=0;i<N;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;
}
  • 写回答

1条回答 默认 最新

  • qzjhjxj 2022-10-12 16:41
    关注

    减少一次循环,其他没什么好优化的,试试:

    #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;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月21日
  • 已采纳回答 10月13日
  • 创建了问题 10月8日

悬赏问题

  • ¥15 请问一下这个运行结果是怎么来的
  • ¥15 单通道放大电路的工作原理
  • ¥30 YOLO检测微调结果p为1
  • ¥20 求快手直播间榜单匿名采集ID用户名简单能学会的
  • ¥15 DS18B20内部ADC模数转换器
  • ¥15 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决