码迷,mamicode.com
首页 > 其他好文 > 详细

数字分类 (20)

时间:2017-04-13 09:20:13      阅读:258      评论:0      收藏:0      [点我收藏+]

标签:问题   存在   break   浮点   思路   info   用例   变量   int   

数字分类 (20)

时间限制 1000 ms 内存限制 32768 KB 代码长度限制 100 KB

题目描述

给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字:



A1 = 能被5整除的数字中所有偶数的和;

A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2+n3-n4...;

A3 = 被5除后余2的数字的个数;

A4 = 被5除后余3的数字的平均数,精确到小数点后1位;

A5 = 被5除后余4的数字中最大数字。

输入描述:

每个输入包含1个测试用例。每个测试用例先给出一个不超过1000的正整数N,随后给出N个不超过1000的待分类的正整数。数字间以空格分隔。


输出描述:

对给定的N个正整数,按题目要求计算A1~A5并在一行中顺序输出。数字间以空格分隔,但行末不得有多余空格。

若其中某一类数字不存在,则在相应位置输出“N”。

输入例子:

13 1 2 3 4 5 6 7 8 9 10 20 16 18

输出例子:

30 11 2 9.7 9


思路:
设定出几种情况需要用到了变量分情况讨论即可。

需要的问题:
1、强制转换类型
v1版编码时 余数为3时,平均数总不对。后来发现是除数被除数都是int型,结果不是浮点型而是自动识别为int型。所以需要强制转换下,或者设置sum变量时直接设为浮点型,此时除数和被除数有一个为浮点型,计算时即可按照浮点型运算。
2、break
switch-case语句,break表示跳至switch有括号处。若没有break则继续执行下一个case语句。


v1版↓
#include<stdio.h>
int main(){
    int num,a,a1=0,a2=0,a3=0,a5=0,n,i,b=1,sum=0,co3=0;
    float a4=0;
    bool s0=false,s1=false,s2=false,s3=false,s4=false;
    
    scanf("%d",&n);
    
    for(i=0;i<n;i++){
        scanf("%d",&num);
        a=num%5;
        switch(a)
        {
            case 0:{
                if(num%2==0){
                s0=true;
                a1=a1+num;
                break;
                }
                break;            
            }
            case 1:{
                s1=true;
                a2=a2+b*num;
                b=-b;
                break;
            }
            case 2:{
                s2=true;
                a3++; 
                break;
            } 
            case 3:{
                    s3=true;
                    sum=sum+num;
                    co3++;
                    a4=(float)sum/co3;
                    break;
            }
            case 4:if(num>a5){
                s4=true;
                a5=num;
                break;
            }
        }
    }
    if(s0)
        printf("%d",a1);
    else
    printf("N");
    if(s1)
        printf(" %d",a2);
    else
    printf(" N");
    if(s2)
        printf(" %d",a3);
    else
    printf(" N");
    if(s3)
        printf(" %.1f",a4);
    else
    printf(" N");
    if(s4)
        printf(" %d",a5);
    else
    printf(" N");
    
    return 0;
}

 

v1代码思路清晰却有些拖沓,可优化,晚些来填坑。

 

数字分类 (20)

标签:问题   存在   break   浮点   思路   info   用例   变量   int   

原文地址:http://www.cnblogs.com/AndKuang17/p/6702071.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!