| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1662 人关注过本帖, 1 人收藏
标题:不知到各位有没有简便方法 数字分类 (20分)
只看楼主 加入收藏
Knightl8
Rank: 1
等 级:新手上路
帖 子:48
专家分:7
注 册:2020-3-8
结帖率:87.5%
收藏(1)
已结贴  问题点数:10 回复次数:8 
不知到各位有没有简便方法 数字分类 (20分)
图片附件: 游客没有浏览图片的权限,请 登录注册

输入样例 1:
13 1 2 3 4 5 6 7 8 9 10 20 16 18

输出样例 1:
30 11 2 9.7 9

输入样例 2:
8 1 2 4 5 6 7 9 16

输出样例 2:
N 11 2 N 9
这是我的,希望各位有没有其他简便的方法
程序代码:
#include <stdio.h>
#include <stdlib.h>
#define MAX 1000

int main(void)
{
    int num[MAX];
    float n[5] = {0};
    int count = 0, sum = 0,flag=0;
    int m, max = 0, sign = 1;
    scanf("%d", &m);
    for (int i = 0; i < m; i++)
    {
        scanf("%d", &num[i]);

        if (num[i] % 5 == 0 && num[i] % 2 == 0)
        {
            n[0] += num[i];
        }
        if (num[i] % 5 == 1)
        {
            flag=1;
            n[1] += sign * num[i];
            sign *= -1;
        }
        if (num[i] % 5 == 2)
        {
            n[2]++;
        }
        if (num[i] % 5 == 3)
        {
            count++;
            sum += num[i];
        }
        if (num[i] % 5 == 4)
        {
            if (num[i] > max)
            {
                max = num[i];
                n[4] = max;
            }
        }
    }
    if(count!=0)
    n[3] = 1.0 * sum / count;
    for (int i = 0; i < 5; i++)
    {
        if (n[i] != 0&& i!=1)
        {
            if (i == 3)
                printf("%.1f", n[i]);
            else
            {
                printf("%.0f", n[i]);
            }
        }
        else if(i==1&&flag!=0)
        {
            printf("%.0f",n[i]);
        }
        else
        {
            printf("%c",'N');
        }
        
        

        if (i < 4)
        {
            printf(" ");
        }
        else
        {
            printf("");
        }
    }

    system("pause");
    return 0;
}

搜索更多相关主题的帖子: printf MAX int num count 
2020-03-10 10:56
return_0
Rank: 8Rank: 8
来 自:五维空间
等 级:禁止访问
威 望:3
帖 子:512
专家分:838
注 册:2020-1-28
收藏
得分:3 

水。。。

2020-03-10 11:00
return_0
Rank: 8Rank: 8
来 自:五维空间
等 级:禁止访问
威 望:3
帖 子:512
专家分:838
注 册:2020-1-28
收藏
得分:0 
能用switch应该简便一些

2020-03-10 11:01
return_0
Rank: 8Rank: 8
来 自:五维空间
等 级:禁止访问
威 望:3
帖 子:512
专家分:838
注 册:2020-1-28
收藏
得分:0 
a1您能化简,因为他其实指的是能被10整除的数

2020-03-10 11:06
return_0
Rank: 8Rank: 8
来 自:五维空间
等 级:禁止访问
威 望:3
帖 子:512
专家分:838
注 册:2020-1-28
收藏
得分:0 
a2使用flag变量应该这样用:
flag=1-flag
巧不巧?
1转0
0转1

2020-03-10 11:17
xianfajushi
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:8
帖 子:527
专家分:690
注 册:2007-9-8
收藏
得分:3 
1如果对输入的一个数当即处理,就不需要数组scanf("%d", &num[i]);只需要一个变量即可
2多次运算确实啰嗦且效率低,用一个变量获取运算的值,依据值选择执行即可。为此修改一下:int aa=0;循环中修改:scanf("%d", &aa),aa%=5;
3使用选择语句即可if(aa==0)else if(aa==1)...else这样就可以了。
4float n[5]的下标也就是aa的值if(aa==0)n[aa]=
2020-03-10 11:31
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:3 
直接上代码,尽量综合有共性的部分。
用if和用switch看个人喜好,结果都一样。
程序代码:
#include<stdio.h>
int main()
{
    int i,j,f=1,m,n,a[5][2]={0};
    scanf("%d",&n);
    while(n--)
    {
        scanf("%d",&m);
        j=m%5;
        if(j>0||!(m%10))a[j][1]++;
        if(!(m%10)||j==3)a[j][0]+=m;
        if(j==1)
        {
            a[j][0]+=(m*f);
            f*=-1;
        }
        if(j==2)a[j][0]=a[j][1];
        if(j==4&&m>a[j][0])a[j][0]=m;
    }
    for(i=0;i<5;i++)
    {
        if(i)printf(" ");
        if(!a[i][1])printf("N");
        else if(i==3)printf("%.1f",(float)a[i][0]/a[i][1]);
        else printf("%d",a[i][0]);
    }
    printf("\n");
    return 0;
}    

能编个毛线衣吗?
2020-03-10 11:39
xianfajushi
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:8
帖 子:527
专家分:690
注 册:2007-9-8
收藏
得分:0 
使用if(aa==0)else if(aa==1)...else可以提高效率跳过不必要的判断运算。
2020-03-10 13:02
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1705
专家分:4345
注 册:2007-12-27
收藏
得分:3 
我来装一回。
程序代码:
#include <stdio.h>
void A1(int x)
{
        static sum=0;
        if(x)
        {        if(x%2==0)sum+=x;}
        else
                printf(sum?"%d ":"N ",sum);
}
void A2(int x)
{
        static sum=0,s=-1,count=0;
        if(x)
        {       
                count++;
                s*=-1;
                sum+=s*x;
        }
        else
                printf(count?"%d ":"N ",sum);
}
void A3(int x)
{
        static count=0;
        if(x) count++;
        else printf(count?"%d ":"N ",count);
}
void A4(int x)
{
        static sum=0,count=0;
        if(x)
        {
                sum+=x;
                count++;
        }
        else
                printf(count?"%.1f ":"N ",(double)sum/count);
}
void A5(int x)
{
        static max=0;
        if(x)
        {       if(x>max)max=x;}
        else
                printf(max?"%d\n":"N\n",max);
}
int main()
{
        void (*A[5])(int)={A1,A2,A3,A4,A5};
        int N,x;
        scanf("%d",&N);
        while(N--)
        {
                scanf("%d",&x);
                A[x%5](x);
        }
        for(x=0;x<5;x++)
                A[x](0);
        return 0;
}

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2020-03-10 14:05
快速回复:不知到各位有没有简便方法 数字分类 (20分)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030286 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved