PAT甲题题解-1108. Finding Average (20)-字符串处理

求给出数的平均数,当然有些是不符合格式的,要输出该数不是合法的。

这里我写了函数来判断是否符合题目要求的数字,有点麻烦。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string.h>
using namespace std;
const int maxn=105;

bool islegal(char*str){
    int len=strlen(str);
    int point=0,decimal=0;
    for(int i=0;i<len;i++){
        //if(i==0 && str[i]==‘0‘&&len>1){
        //    if(str[1]!=‘.‘)
        //        return false;
        //}
        if(str[i]==‘-‘ && i!=0)
            return false;
        else if(str[i]==‘-‘ && i==0)
            continue;
        if(str[i]==‘.‘ && i==0)
            return false;
        if(str[i]==‘.‘){
            point++;
            if(point>=2)
                return false;
        }
        else if(str[i]<‘0‘ ||str[i]>‘9‘)
            return false;
        else if(str[i]>=‘0‘ && str[i]<=‘9‘ && point==1){
            decimal++;
            if(decimal>=3)
                return false;
        }
    }
    return true;
}

int main()
{
    int n;
    char str[maxn];
    scanf("%d",&n);
    double sum=0.0;
    double a;
    int k=0;
    for(int i=0;i<n;i++){
        scanf("%s",str);
        bool flag=false;
        if(islegal(str)){
            a=atof(str);
            if(a>=-1000.0 && a<=1000.0)
                flag=true;
        }
        if(flag){
//printf("%lf\n",a);
            sum+=a;
            k++;
        }
        else{
            printf("ERROR: %s is not a legal number\n",str);
        }
    }
    if(k==0){
        printf("The average of 0 numbers is Undefined\n");
    }
    else if(k==1){
        printf("The average of %d number is %.2lf\n",k,sum);
    }
    else{
        printf("The average of %d numbers is %.2lf\n",k,sum/k);
    }
    return 0;
}

可以参考下面别人的题解,用到了sscanf和sprintf函数,就很方便:

http://www.liuchuo.net/archives/1924

时间: 2024-10-26 03:26:14

PAT甲题题解-1108. Finding Average (20)-字符串处理的相关文章

PAT甲题题解-1073. Scientific Notation (20)-字符串处理

题意:给出科学计数法的格式的数字A,要求输出普通数字表示法,所有有效位都被保留,包括末尾的0. 分两种情况,一种E+,一种E-.具体情况具体分析╮(╯_╰)╭ #include <iostream> #include <cstdio> #include <algorithm> #include <string.h> #include <cmath> #define POSITIVE 1 #define NEGATIVE 2 using names

PAT甲题题解-1096. Consecutive Factors(20)-(枚举)

题意:一个正整数n可以分解成一系列因子的乘积,其中会存在连续的因子相乘,如630=3*5*6*7,5*6*7即为连续的因子.给定n,让你求最大的连续因子个数,并且输出其中最小的连续序列. 比如一个数可以分解2*3*4*6*7*8,最大的连续个数为3,因为存在两个,输出最小的那个即2*3*4. 首先,一个数如果是合数,那么它的因子必定不会超过sqrt(n)或者sqrt(n)+1.如果为质数,那么只可能为自己,因为题目说了不包括1. 我们先将2~sqrt(n)+1中为n的因子存到factor数组中,

PAT甲题题解-1088. Rational Arithmetic (20)-模拟分数计算

输入为两个分数,让你计算+,-,*,\四种结果,并且输出对应的式子,分数要按带分数的格式k a/b输出如果为负数,则带分数两边要有括号如果除数为0,则式子中的结果输出Inf模拟题最好自己动手实现,考验细节处理,其它没啥好说的. #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> using namespace std; long long numerato

PAT甲题题解-1050. String Subtraction (20)-水题

#include <iostream> #include <cstdio> #include <string.h> #include <algorithm> using namespace std; /* 水题,注意字符范围是整个ASCII编码即可. */ const int maxn=130; int vis[maxn]; char s1[10000+5]; char s2[10000+5]; int main() { gets(s1); //getcha

PAT甲题题解-1112. Stucked Keyboard (20)-(map应用)

题意:给定一个k,键盘里有些键盘卡住了,按一次会打出k次,要求找出可能的坏键,按发现的顺序输出,并且输出正确的字符串顺序. map<char,int>用来标记一个键是否为坏键,一开始的时候都为0,表明所有的键为坏键. 然后遍历每个字符,统计当前字符连续出现的次数cnt,则只要存在cnt%k!=0,则表明为好键,另其map=1. 最后再for一遍字符串,存储坏键字符串和正确字符串,最后输出即可. #include <iostream> #include <cstdio>

PAT甲题题解-1042. Shuffling Machine (20)-模拟

博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789205.html特别不喜欢那些随便转载别人的原创文章又不给出链接的所以不准偷偷复制博主的博客噢~ 给出洗牌次数,以及洗牌的序列规则第i个数shuffles[i]表示要将第i张牌移到第shuffles[i]个 很简单,就是shuffle_seq[shuffles[i]]=start_seq[i]; #include <iostream> #include

PAT甲题题解-1081. Rational Sum (20)-模拟分数计算

模拟计算一些分数的和,结果以带分数的形式输出注意一些细节即可 #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <cmath> using namespace std; /* 模拟计算一些分数的和,结果以带分数的形式输出 注意一些细节即可 */ const int maxn=105; const int maxv=50000

PAT 甲级 1108 Finding Average (20分)

1108 Finding Average (20分) The basic task is simple: given N real numbers, you are supposed to calculate their average. But what makes it complicated is that some of the input numbers might not be legal. A legal input is a real number in [−] and is a

PAT甲题题解-1035. Password (20)-水

题意:给n个用户名和密码,把密码中的1改为@,0改为%,l改为L,O改为o. 让你输出需要修改密码的用户名个数,以及对应的用户名和密码,按输入的顺序.如果没有用户需要修改,则输出对应的语句,注意单复数... 没啥好说的,就for一遍密码,把需要改的改下,存入到ans中去. #include <iostream> #include <cstdio> #include <algorithm> #include <string.h> #include <cm