试图转专业的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 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来