PAT甲级-1108 Finding Average (20 分)

题目:1108 Finding Average (20 分)
分析:模拟,判断是否为题目要求的合法序列。第一次好像是参考别人代码写的,第二次自己写的比较复杂

1、

#include <iostream>
#include<cstring>
#include<vector>
#include<stdio.h>
#include<queue>
#include<math.h>
#include<stack>
#include<algorithm>
#include<map>
#include<set>
#define MAX 99999999
typedef long long ll;
using namespace std;
int n,m,k;
int j(string s)
{
    
    
    int len = s.size();
    int flag = 1;
    for(int i = 0;i<len;i++)
    {
    
    
        int t = 0;
        if(s[i] == '-' && i == 0)
            continue;
        if(s[i] == '.')
        {
    
    
            t ++;
            if(len -i-1 >2)
            {
    
    
                flag = 0;
                break;
            }
        }
        else if(isdigit(s[i]) == 0)
        {
    
    
            flag = 0;break;
        }
        if(t>=2)
        {
    
    
            flag = 0;
            break;
        }

    }
    if(flag == 0)
        return 0;
    double ans = stod(s);
    if(abs(ans)<=1000)
        return 1;
    return 0;
}
int main()
{
    
    
    cin>>n;
    double ans = 0;
    int num = 0;
    while(n--)
    {
    
    
        string s;
        cin>>s;
        if(j(s))
        {
    
    
            ans += stod(s);
            num++;
        }
        else
            cout<<"ERROR: "<<s<<" is not a legal number\n";
    }
    if(num>=2)
        printf("The average of %d numbers is %0.2f",num,ans/num);
    else if(num == 1)
        printf("The average of 1 number is %0.2f",ans);
    else if(num == 0)
        printf("The average of 0 numbers is Undefined");
    return 0;
}

2、

#include <iostream>
#include<cstring>
#include<vector>
#include<stdio.h>
#include<algorithm>
using namespace std;
int n,m,k;
int main()
{
    
    
    cin>>n;
    int cnt = 0;
    double ans = 0;
    while(n--)
    {
    
    
        string s;cin>>s;
        int len = s.size();
        int d = -1;//小数点在数组中的位置
        int flag = 0;//判断是否合法
        for(int i = 0 ; i < len ;i++)
        {
    
    
            if(s[i] == '.'){
    
    
                d = i;
                break;
            }
        }
        if(d == -1)//没有小数点
        {
    
    
            for(int i = 0; i < len;i++)
            {
    
    
                if(i == 0 && s[i]== '-')continue;
                if(s[i] < '0' || s[i] > '9'){
    
    
                    flag = 1;
                    break;
                }
            }
            if(!flag && stod(s) >= -1000 && stod(s) <= 1000){
    
    
                ans += stod(s);
                cnt++;
            }
            else
                printf("ERROR: %s is not a legal number\n",s.c_str());
        }
        else//有小数点
        {
    
    
            for(int i = 0; i < d;i++)
            {
    
    
                if(i == 0 && s[i]== '-')continue;
                if(s[i] < '0' || s[i] > '9'){
    
    
                    flag = 1;
                    break;
                }
            }
            if(len - d - 1 > 2)//小数点位数
                flag = 1;
            for(int i = d + 1; i < len ;i++)
            {
    
    
                if(s[i] < '0' || s[i] > '9'){
    
    
                    flag = 1;
                    break;
                }
            }
            if(!flag && stod(s) >= -1000 && stod(s) <= 1000){
    
    
                ans += stod(s);
                cnt++;
            }
            else
                printf("ERROR: %s is not a legal number\n",s.c_str());
        }
    }
    if(cnt == 1)
        printf("The average of %d number is %.2f",cnt,ans);
    else if(cnt == 0)
        printf("The average of 0 numbers is Undefined");
    else
        printf("The average of %d numbers is %.2f",cnt,ans/cnt);

    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_43567222/article/details/113846730
今日推荐