PTA 1108 Finding Average (20分)

台积电技术研发实力 台积电技术研发实力 台积电在半导体行业的地位毋庸置疑。他们究竟有多强大,大部分读者了解得可能非常片面。从最新公布的2019年财报里,看看台积电的真正实力。 一、台积电在市场上的地位 根据公司财报,台积公司在先进制程技术、特殊制程技术,以及先进封装技术的发展上持续领先全球集成电路制造服务领域,2019年的市场占有率为52%。台积公司总体营收以地区划分(主要依据客户营运总部所在地),来自北美市场的营收占台积公司总体营收的60%、日本与中国大陆以外的亚太市场占9%、中国大陆市场占20%、欧洲、中东及非洲市场占6 阅读详情

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 [−1000,1000] and is accurate up to no more than 2 decimal places. When you calculate the average, those illegal numbers must not be counted in.

Input Specification:

Each input file contains one test case. For each case, the first line gives a positive integer N (≤100). Then N numbers are given in the next line, separated by one space.

Output Specification:

For each illegal input number, print in a line ERROR: X is not a legal number where X is the input. Then finally print in a line the result: The average of K numbers is Y where K is the number of legal inputs and Y is their average, accurate to 2 decimal places. In case the average cannot be calculated, output Undefined instead of Y. In case K is only 1, output The average of 1 number is Y instead.

Sample Input 1:

7
5 -3.2 aaa 9999 2.3.4 7.123 2.35

Sample Output 1:

ERROR: aaa is not a legal number
ERROR: 9999 is not a legal number
ERROR: 2.3.4 is not a legal number
ERROR: 7.123 is not a legal number
The average of 3 numbers is 1.38

Sample Input 2:

2
aaa -9999

Sample Output 2:

ERROR: aaa is not a legal number
ERROR: -9999 is not a legal number
The average of 0 numbers is Undefined

 

题目大意:

以字符串的形式输入n个数字串,统计出其中合法的数字串的平均值。

合法的数字串满足的条件

  1. 不包含除了数字和"-"以及"."以外的字符
  2. 小数点的个数不能大于1个,并且小数点可以出现在数字串末尾,但不能出现在数字串首
  3. "-"只能出现在字符串首位
  4. 对于浮点数,它的小数位不能超过2位
  5. 数字的大小在[-1000,1000]之内

注意事项:

1.

若最终求出的合法数字个数为1时,输出结果中的number不加s,若个数为其他数时应加s

例如合法数字个数为3时

The average of 3 numbers is Y

合法数字为1时

The average of 3 number is Y

方法一:

#include<bits/stdc++.h>

using namespace std;
int main()
{
    string t;
    int n,i,num,d,j,flag,numd;
    double sum=0;
    cin>>n;
    num=0;  // 有效数字的个数
    for(i=1; i<=n; i++)
    {
        cin>>t;  //输入字符串
        numd=0; //记录小数点的个数
        flag=1; //记录有效数字的正负
        d=t.length();
        //判断字符串是否含有非法字符
        for(j=0; j<t.length(); j++)
        {
            if(j==0&&t[j]=='-')
            {
                flag=-1;
                continue;
            }
            else if(t[j]=='.')
            {
                d=j; //记录小数点的位置
                numd++;
            }
            else if(t[j]<'0'||t[j]>'9')
            {
                break;
            }
        }
        //若字符串首为小数点 则不合法
        if(t[0]=='.')
        {
            cout<<"ERROR: "<<t<<" is not a legal number"<<endl;
            continue;
        }
        //若存在非法字符,或者小数点个数大于1
        if(j!=t.length()||numd>=2)
        {
            cout<<"ERROR: "<<t<<" is not a legal number"<<endl;
            continue;
        }
        //计算小数位个数
        int xiao = t.length()-1-d;
        //如果小数位大于2则不合法
        if(xiao>2)
        {
            cout<<"ERROR: "<<t<<" is not a legal number"<<endl;
        }
        else
        {
            double ss = 0;
            for(j=0; j<t.length(); j++)
            {
                if(t[j]!='.'&&t[j]!='-')
                {
                    ss=ss*10+t[j]-'0';
                }
            }
            if(d!=t.length())
            {
                ss=ss*flag/pow(10,xiao); //转为小数
            }
            else
            {
                ss=ss*flag;
            }
            if(ss>=-1000&&ss<=1000)
            {
                sum+=ss;
                num++; //合法数字加一
            }
            else
            {
                cout<<"ERROR: "<<t<<" is not a legal number"<<endl;
            }
        }
    }
    if(num==0)
    {
        printf("The average of 0 numbers is Undefined\n");
    }
    else if(num==1)
    {
        printf("The average of %d number is %.2lf\n",num,sum/num);
    }
    else
    {
        printf("The average of %d numbers is %.2lf\n",num,sum/num);
    }
    return 0;
}

方法二:

使用下列两个函数可以快速解决这道题

sscanf() – 从一个字符串中读进与指定格式相符的数据

例如sscanf(a, "%lf", &temp);

它的作用是将字符串a中的符合浮点数格式的部分提取出来放到字符串temp中

例如a为1.23.14

前面的1.23符合浮点数格式。而后面的.14由于前面已经出现过小数点了,因此被判定为不符合浮点数格式,因此.14被丢弃

最终temp="1.12"
sprintf() – 字符串格式化命令,主要功能是把格式化的数据写入某个字符串中

#include <iostream>
#include <cstdio>
#include <string.h>
using namespace std;
int main() {
    int n, cnt = 0;
    char a[50], b[50];
    double temp = 0.0, sum = 0.0;
    cin >> n;
    for(int i = 0; i < n; i++) {
        scanf("%s", a);
        sscanf(a, "%lf", &temp);
        sprintf(b, "%.2f",temp);
        int flag = 0;
        for(int j = 0; j < strlen(a); j++)
            if(a[j] != b[j]) flag = 1;
        if(flag || temp < -1000 || temp > 1000) {
            printf("ERROR: %s is not a legal number\n", a);
            continue;
        } else {
            sum += temp;
            cnt++;
        }
    }
    if(cnt == 1)
        printf("The average of 1 number is %.2f", sum);
    else if(cnt > 1)
        printf("The average of %d numbers is %.2f", cnt, sum / cnt);
    else
        printf("The average of 0 numbers is Undefined");
    return 0;
}

 

基于 ESP32 的分布式光伏微电网智能监控系统设计与实现 设备 / 模块连接 ESP32 引脚备注I2C 总线(SDA)GPIO21所有 I2C 设备共用I2C 总线(SCL)GPIO22所有 I2C 设备共用DS18B20(单总线)GPIO18单总线通信,需外接 4.7K 上拉电阻有源蜂鸣器GPIO19低电平触发,串联 100Ω 限流电阻ESP32 供电5V/GND由 LM2596 输出 5V 供电,或直接 USB 供电(调试阶段)INA219(光伏)光伏阵列正负极接 INA219 的 VIN+/VIN- 阅读详情

相关推荐

LSTM量化选股实战:从数据清洗到回测归因的工程化闭环

LSTM(长短期记忆网络)是一种专为建模长程依赖而设计的循环神经网络,其门控机制能有效应对金融时序数据的非线性、高噪声与动态演化特性。相比传统统计模型或简单RNN,LSTM在股价趋势建模中展现出更强的鲁棒性与泛化能力,尤其适合处理日频多因子时序信号。其技术价值不仅在于提升预测精度,更在于支撑可归因、可审计的量化策略工程实践——从特征构建、标签定义到滚动回测,每一步都需严防未来信息泄露与过拟合风险。典型应用场景包括A股多因子选股、行业轮动信号生成及Alpha组合优化。本文聚焦LSTM在真实量化场景中的落地难点

weixin_33158887的博客 398

1108. Finding Average (20)

转自:https://www.liuchuo.net/archives/1924 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 i

JUST CODE IT 297

从原理到应用:深入解析双编码器在机器人关节力矩感知中的实现

本文深入解析了双编码器方案在机器人关节力矩感知中的实现原理与应用。该方案通过在电机侧和输出侧分别安装编码器,利用两者位置差异间接高精度计算外力,克服了传统电流环精度不足和扭矩传感器成本高昂的缺点。它为实现协作机器人的丝滑拖动示教、灵敏碰撞检测以及足式机器人的动态平衡与柔顺控制提供了关键技术支撑,是目前高性能机器人力控的主流选择。

t8u9v0w1x的博客 662

「1108」Finding Average

The basic task is simple: givenNreal numbers, you are supposed to calculate their average. But what makes it complicated is that some of the input numbers might not be legal. Alegalinput ...

weixin_52435933的博客 225

Python异步协程爬虫优化:解决aiohttp中ServerDisconnectedError的高效策略

本文深入探讨了在Python异步协程爬虫中使用aiohttp时,如何高效解决常见的ServerDisconnectedError问题。核心策略包括全局复用ClientSession、精细配置TCPConnector连接池、实施请求重试与速率限制,从而构建稳定、高效的异步爬虫架构,有效避免服务器断开连接错误。

pz890123的博客 857

Unity IAP插件实战:从零搭建Google Play内购系统

本文详细介绍了如何使用Unity IAP插件从零搭建Google Play内购系统,涵盖环境准备、双端配置、核心API实现及常见问题排查。通过实战代码示例,帮助开发者快速掌握跨平台内购功能开发,提升手游商业化效率。

weixin_28692867的博客 430

个人练习-PAT甲级-1108 Finding Average

题目链接https://pintia.cn/problem-sets/994805342720868352/problems/994805360777347072 题目大意:给出N个数字,求平均数。其中可能有非法的数字,要剔除。要求数字绝对值小于等于1000且精度最多两位。 所以主要就是判断是否合法,把所有非法都剔除即可。【负号只能出现在开头】【小数点最多一个】【小数点后最多再出现两位】等等条件判断了即可。 输出时注意合法数字个数为0或者1的情况。 完整代码 #include <iostream&gt

Rstln的博客 216

Qt 5.12.8在Linux下编译qtvirtualkeyboard模块,我踩过的那些坑(附完整解决方案)

本文详细介绍了在Linux系统下为Qt 5.12.8单独编译qtvirtualkeyboard模块的完整解决方案。通过分析模块缺失原因、提供精准的编译步骤和常见问题处理,帮助开发者高效解决虚拟键盘模块缺失问题,避免重新编译整个Qt源码的繁琐过程。

weixin_29248611的博客 458

PTA甲级 1108 Finding Average (C++)

The basic task is simple: given NNN 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 [−1000,1000][−1000,1000][−1000,1000] and is

Misdirection 142

DCDC--控制方式(Control Mode)

DCDC反馈控制方式

网始如芯个人博客 1万+

RK3568平台开发系列讲解(中断及异常篇)中断下半部:中断线程化

以前用 work 来线程化地处理中断,一个 worker 线程只能由一个 CPU 执行, 多个中断的 work 都由同一个 worker 线程来处理,在单 CPU 系统中也只能忍着 了。少数中断不能线程化,典型的例子是时钟中断,有些流氓进程不主动让出处理器,内核只能依靠周期性的时钟中断夺回处理器的控制权,时钟中断是调度器的脉搏。中断处理线程是优先级为50、调度策略是SCHED_FIFO的实时内核线程,名称是“irq/”后面跟着Linux中断号,线程处理函数是。,说明是线程化的中断,那么唤醒中断处理线程。

内核笔记 435

【甲级PAT】-1108 Finding Average (20分)-数字处理

题目描述 1108 Finding Average (20分) 规定有效数字为: 范围在 [−1000,1000] 之内的实数 小数点后不超过两位 输入一组数据,求有效数字的平均值。对于非有效数字,输出ERROR: X is not a legal number 思路 由于输入的数据可能不是实数或小数点的个数多于1,故使用字符串来存储输入数据。 编写trans函数将输入的字符串转换为数字 f函数判断是否为合法数字 #include <bits/stdc++.h> using namespa

断言的博客 235

【智能流体力学】使用ANSYS Fluent + SpaceClaim + SCDM制作流体力学前处理的几何模型

生成来源.scdoc文件来自前处理工具生成的模型数据,或在 FLUENT 中创建和保存的模型。生成方式: 通过前处理工具导出网格数据,或在 FLUENT 中设置并保存模型。作用: 用于储存模型的结构信息和设置,确保在 FLUENT 中的正确导入和使用。.x_t文件是 Parasolid 文件格式的扩展名,用于存储三维模型数据。在 ANSYS Fluent 中,这种格式通常用于在前处理工具之间交换几何数据。要创建.x_t。

源代码杀手的博客 3265

PTA甲级 1108 Finding Average (20point(s))

强烈推荐,刷PTA的朋友都认识一下柳神–PTA解法大佬 本文由参考于柳神博客写成 柳神的优快云博客,这个可以搜索文章 柳神的个人博客,这个没有广告,但是不能搜索 还有就是非常非常有用的 算法笔记 全名是 算法笔记 上级训练实战指南 //这本都是PTA的题解 算法笔记 PS 今天也要加油鸭 题目原文 The basic task is simple: given N real numbers, you are supposed to calculate their average. But what

Huangpengyu123的博客 286

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

PTA甲级考试真题练习108——1108 Finding Average

题目 思路 利用sscanf和sprintf,因为sscanf可以过滤掉非数字的字符串,如果是数字的话再转成另一个字符串的2位精度,如果和A的部分相等则符合要求 代码 #include <iostream> #include<string.h> using namespace std; const int nmax = 1005; char a[50], b[50]; d...

醉等佳人归 212

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

PTA 1108 Finding Average

题目描述 分析:主要是判断输入是否合理,利用sscanf和sprintf即可 C语言sprintf与sscanf函数[总结] #include<cstdio> int main(){ int n; scanf("%d",&n); double sum=0.0; int num=0; char s1[105],s2[105]; while (n--) { scanf("%s",s1); double

qaqaqa666的博客 161

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

A1108 Finding Average (20 分)atof()函数

#include&amp;lt;cstdio&amp;gt; #include&amp;lt;cstring&amp;gt; int main() { int n, sum = 0, count = 0; double total = 0;//count记录有效数字数 bool negative = 0,flag=0,point=0; char str[10000]; scanf(&quot;%d&quot;, &amp;amp;n); f

A_Aria的博客 300

PAT 甲级:1108. Finding Average

这题的主要难点在于考虑所有非法数字的情况。 #include #include #include #include #include #include #include #include #include #include using namespace std; const int maxn=1001; bool islegal(string s){ //+-号,多个小数点,小数点后面位数过

u014089160的博客 400

每日一题——Python实现PAT甲级1108 Finding Average(举一反三+思想解读+逐步优化)

这段代码实现了对输入数值的合法性检测和平均值计算,逻辑清晰,操作简单。时间复杂度和空间复杂度均为 O(N),适用于输入数据量较大的情况。需要注意的是,这段代码假设输入的初始 N 和数值字符串是有效的,未处理可能的输入异常(如非整数的 N)。通过以上优化,使代码更加模块化和简洁,减少了冗余的条件检查,并保持了整体的时间和空间复杂度。这些改进使代码更具有可读性和可维护性。通过这些编程哲学和思想,不仅优化了代码的性能,还提高了其可读性和可维护性。

weixin_44915521的博客 1015

1108 Finding Average

1108 Finding Average 题目大意 输入可能存在非法输入,求合法输入数值的平均值 注意 1、最后的输出要注意,当合法数的个数为0或者大于等于2时,用复数numbers;当只有一个时,用单数number。 2、另一种简单的参考方案时是,遍历找到小数点位置,如果存在小数点位置,并且小数点位置后还存在至少3个字符位,就说明不合法。 3、可以直接用sscanf(str.c_str(),"%...

weixin_40541877的博客 324

1108. Finding Average 解析

用string读入,然后进行判定,有字母的非法,有几个小数点的非法,小数点超过2位的非法。 特别要注意读入的数要在[-1000,1000]之间。 最后还要注意,number和numbers。 #include #include #define MAX 110 using namespace std; int n; string list[MAX]; int sum; bo

sheepyWYY的博客 541

1108 Finding Average (20 分) 全网最细 题目详解 翻译 完整代码 PAT甲级真题解析

1108 Finding Average(20分)预备知识:题目翻译:输入格式:输出格式:题目解析:逻辑梳理:参考代码: 预备知识: 题目翻译: 难点单词: 输入格式: 输出格式: 输入样例(一): 7 5 -3.2 aaa 9999 2.3.4 7.123 2.35 输出样例(一): ERROR: aaa is not a legal number ERROR: 9999 is not a legal number ERROR: 2.3.4 is not a legal number

BBBling的博客 557

1108 Finding Average (20 分)

#include <bits/stdc++.h> using namespace std; bool isNum(string s){ //判断字符串是否是一个数字 bool flag= true; if(s[0]=='-') s=s.substr(1); for(int i=0;i<s.length();i++){ if((s[i]>='0'&&s[i]<='9')||s[i]=='.') .

qq_43197644的博客 134

PAT甲级——1108 Finding Average (字符串)

1108Finding Average(20分) The basic task is simple: givenNreal numbers, you are supposed to calculate their average. But what makes it complicated is that some of the input numbers might not be l...

小熊猫的博客 421

【PAT】1108. Finding Average

考查点:模拟题 提交情况:水题,但是有几个坑,首先number输出时如果是单数1不能加s,其次小数点后面数可以是零个。。 #define LOCAL #include #include #include #include #include #include #include #include #include #include #include #define FOR(i

天行健,君子以自强不息 1016

PAT甲组1108.Finding Average思路解析和代码

A1108 题目链接 个人思路 本题属于模拟题+字符串处理问题 由于输入包含字母和多个小数点,其实并没有多个负号,个人解题时以防万一加上的 判断输入是否有效,包含字母和多个小数点则返回false 字符转换为数字并判断数字是否有效,将数字的整数部分和小数部分分开计算(标记小数点位置),最后加和返回。由于是bool函数,需要多个返回值(ans计算结果)则需要使用引用 注意最后细节,输出个数为1,nu...

九筒的博客 215
上一篇: Java中各类修饰符的使用总结(看完这篇就够了)(转载)
下一篇: 1153 Decode Registration Card of PAT (25分)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值