PTA计算平均值(一波三折)

时间:2022-09-05 14:54:40

PTA计算平均值( 一波三折)

现在为若干组整数分别计算平均值。

已知这些整数的绝对值都小于100,每组整数的数量不少于1个,不大于20个。

输入格式:首先输入K(不小于2,不大于20)。接下来每一行输入一组数据(至少有一组数据),每组至少有一个数据,在有多个数据时,两个数据之间有1到3个空格。最后一行输入100,标志输入的结束。

输出格式:对于每一组数据,输出其前K个数据的均值,如果该组数据个数少于K时,则输出该组所有数据的均值。输出的均值只输出整数部分,直接忽略小数部分。

样例输入:

3

10 30 20 40

-10 17 10

10 9

100

样例输出:

20

5

9

话说这次的题目已经明示考察的是数据的输入以及输出的知识,当然和以往我们所写的代码题没有很大的区别,就是数据的输入最后通过100来判断输入的结束;在一开始看到这题的时候,我觉得是可以不用通过字符串就能够完成,因此就没有考虑用字符串解题,通过一个整形数组的形式尝试了一遍,以平时做的C题目习惯来看输入输出应该是都已经成功了的,可是提交的时候不知道为什么却出现段错误的结果:

PTA计算平均值(一波三折)

听说挺多同学是这里出现了段错误,到现在还是不知道为什么会出现这样的结果,如果哪位大哥看到这问题正好知道是怎么回事的话希望可以教教我哈,跪谢跪谢!

经过多次的尝试之后,我就询问了助教(不知道是为什么助教在聊了几下,了解了我的问题之后就不回我了hhh,尴尬)后面挺多同学在群里讨论这个题目的那些坑点,就再测试了一下我的程序,发现如果输入遗传数据之后最后加一个空格的话,就不会有输出:

PTA计算平均值(一波三折)

这应该是一个bug,但是对于它所提示的段错误我还是不能理解,下面是我最开始的通过整形数组实现的代码。

#include<iostream>

using namespace std;

int main()
{
int number, len,aver,over=0;
int num[999],i,sum,n,j;
cin >> number;
for (i = 0; i < 999; i++)
{
cin >> num[0];
if (num[0] != 100)
{
j = 1;
sum = num[0];
aver = sum;
n = 1;
while (getchar() != '\n')
{
cin >> num[j];
sum += num[j];
n++;
aver = sum / n;
j++;
if (n == number)
{
printf("%d", aver);
}
// else
// over = 0;
}
if (n < number)
printf("%d", aver);
}
else if (num[0] == 100)
{
break;
}
}
return 0;
}

不知道其他人有没有一种这样的感觉就是在一开始如果用一种方法实现了一个问题(但是不知道为什么就是没过),后面再要通过另一种方法重新实现的时候,会感觉特别别扭,并且做的时候思路会受到很大影响,感觉很艰难。但是没办法啊,咱总还是得做吧,无奈之下我只能是重新尝试用字符串的方法实现,最开始我认为通过字符串的方法处理数字之间的空格可以通过判断两个数字之间有几个空格来实现(因为题目说每两个数字之间是1~3个空格),但是想了想,似乎这种方法可行度不是很高,毕竟整形数组那样处理到头来都还没过,于是我就搜了有关于用字符串转换数字其中数字之间的空格的处理方法,十分凑巧,百度的时候居然意外的看到了咱们的许郁杨大哥的博客!!!(尴尬的是最开始我还不知道这是他的博客hhh)

下面是这次意外看到的一种我认为挺好的通过字符串转换数字时处理数字之间的空格的方法:

for(i=0;i<len;i++)
{
if(num[i]=='-')
{
temp=-1;
continue;
}
else if(num[i]>='0'&&num[i]<='9')
{
while(num[i]>='0'&&num[i]<='9')
{
num0=10*num0+(num[i]-'0');
i++;
}
numbers[j]=num0*temp;
j++;
temp=1;
}
num0=0;
}

这是借鉴许郁杨同学的方法之后我写的代码,

这里巧妙的通过一个while()来处理字符串中数字之间的其他字符(包括空格);然后其他后续的我想应该就很简单了。

#include<iostream>
#include<string>
#include<string.h> using namespace std; int main()
{
int number,aver,temp;
int i,sum,k,j,len,num0=0,numbers[100];
char num[1000];
cin >> number;
getchar();
for(k=0;k<999;k++)
{
j=0;
sum=0;
temp=1;
cin.getline(num,1000);
len=strlen(num);
// cout<<len<<endl;
for(i=0;i<len;i++)
{
if(num[i]=='-')
{
temp=-1;
continue;
}
else if(num[i]>='0'&&num[i]<='9')
{
while(num[i]>='0'&&num[i]<='9')
{
num0=10*num0+(num[i]-'0');
i++;
}
numbers[j]=num0*temp;
j++;
temp=1;
}
num0=0;
}
if(j==1&&numbers[0]==100)
break;
if(j==0)
continue;
if(j<number)
{
for(i=0;i<j;i++)
{
// cout<<numbers[i]<<endl;
sum+=numbers[i];
// cout<<sum<<endl;
}
aver=sum/(i);
cout<<aver<<endl;
}
else
{
for(i=0;i<number;i++)
{
// cout<<numbers[i]<<endl;
sum+=numbers[i];
// cout<<sum<<endl;
}
aver=sum/number;
cout<<aver<<endl;
}
}
return 0;
}

话说这次的作业是通过最后输入一个100来判断截止,输入输出问题还有许多和我们平时不太一样的,比如说输入的数据是不定数量的;我推荐一篇有关输入的博客

其实几天前就像写一下这次作业的看法的,拖得有点久似乎。

PTA计算平均值(一波三折)的更多相关文章

  1. PTA 计算平均值

    现在为若干组整数分别计算平均值. 已知这些整数的绝对值都小于100,每组整数的数量不少于1个,不大于20个. 输入格式:首先输入K(不小于2,不大于20).接下来每一行输入一组数据(至少有一组数据), ...

  2. matlab 利用while循环计算平均值和方差

    一.该程序是用来测输入数据的平均值和方差的 公式: 二. 项目流程: 1. State the problem假定所有测量数为正数或者0,计算这一系列测量数的平均值和方差.假定我们预先不知道有多少测量 ...

  3. 为什么在 Java 中用 &lpar;low&plus;high&rpar;&gt&semi;&gt&semi;&gt&semi;1 代替 &lpar;low&plus;high&rpar;&sol;2 或 &lpar;low&plus;high&rpar;&gt&semi;&gt&semi;1 来计算平均值呢?好在哪里?

    >>>与>>是位运算符,只对整型有效(不能用于浮点型).当是整型的时候(low+high)>>1可以代替(low+high)/2.>>>是无 ...

  4. C 语言实例 - 计算平均值

    C 语言实例 - 计算平均值 C 语言实例 C 语言实例 使用数组来计算几个数的平均值. 实例 #include <stdio.h> int main() { int n, i; ], s ...

  5. matlab 利用while循环计算平均值和方差&lpar;第二版)

    第一版中因为公式中含有:分母项:n(n-1),而程序并没有对输入数进行判定,如果仅仅输入一个或者一个都不输入,将会出现除0的情况 基于此,进行第二版改进. 代码: % 脚本文件:states.m % ...

  6. Shell 脚本循环遍历日志文件中的值进行求和并计算平均值,最大值和最小值

    本文为博主原创,转载请注明出处: 最近在进行压测,为了观察并定位服务性能的瓶颈,所以在代码中很多地方加了执行耗时的日志,但这种方式只能观察,却在压测的时候,不太能准确的把握代码中某些方法的性能,所以想 ...

  7. C&num; 基础 计算平均值的方法

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  8. OpenCV 自定义任意区域形状及计算平均值 方差

    opencv中有矩形的Rect函数.圆形的circl函数等,那么任意形状怎么取呢?方法1:点乘,将其形状与图像进行点乘,求其形状对应的图像形状:方法2:用findContours函数得对应的形状区域, ...

  9. Hadoop计算平均值【转】

    file1.txt a 1b 2a 3b 3a 5b 7c 3c 5 file2.txt a 1b 7c 5a 1c 3 结果: a 2.2b 4.75c 4.0 代码: package org.ap ...

随机推荐

  1. VNC&plus;SSH相关应用

    1.安装vnc-server  vncviewer2.执行vncserver  输入密码3.执行vncserver -kill :1 杀死1号屏幕4.修改/root/.vnc/xstartup   u ...

  2. hbase使用-java操作

      .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courie ...

  3. iaas&comma;paas&comma;saas理解

    IaaS.PaaS.SaaS多次看到这几个单词,今天仔细看看来, ​这几个词和云计算相关:1,iaaS,Hardware-as-a-Service,信息,硬件服务,服务器,存储和网络硬件,网络存储,带 ...

  4. 半小时学会上传本地项目到github

    半小时学会上传本地项目到github 闲着无聊写给那些正在学习怎么上传本地项目到github的同学. 开始学习 一.创建github账号 好吧,这步多余了. 二.创建个人仓库 三.配置SSH keys ...

  5. SRM 599 DIV1

    A 首先发现对于2操作,每种素因子可以单独考虑,然后取出步数最多的计入答案,然后分别加上对每种素因子的1操作; 第二步我犯了个错误,以为最优方案是把素因子指数按二进制操作,在1的位置执行1操作,0的位 ...

  6. js判断数组和对象

    <script> var arr=new Array(); var obj={'1':2}; var num=11; function isType(obj){ if(obj instan ...

  7. Java遍历二叉树深度宽度

    节点数据结构 class TreeNode { TreeNode left = null; TreeNode right = null; } 最大深度,基本思路是:使用递归,分别求出左子树的深度.右子 ...

  8. &lbrack;HNOI 2009&rsqb;梦幻布丁

    Description 题库链接 维护一个序列 \(A\) .支持以下操作: \(X~Y\) 将序列中所有的 \(X\) 变成 \(Y\) : 询问序列颜色段数. \(1\leq n,m\leq 10 ...

  9. BZOJ5103 &colon; &lbrack;POI2018&rsqb;R&&num;243&semi;znorodno

    从上到下枚举上下底边,那么涉及两行的添加和删除. 首先预处理出对于每一列,每个位置添加和删除时,是否会对往下$k$个里出现这个颜色造成影响. 然后对于每种颜色维护一个长度为$m$的bitset,表示哪 ...

  10. Apache SkyWalking的架构设计【译文】

    Apache SkyWalking提供了一个功能强大并且很轻量级的后端.在此,将介绍为什么采用以下方式来设计它,以及它又是如何工作的. 架构图 对于APM而言,agent或SDKs仅是如何使用libs ...