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题目习惯来看输入输出应该是都已经成功了的,可是提交的时候不知道为什么却出现段错误的结果:

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

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

这应该是一个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 中用 (low+high)>>>1 代替 (low+high)/2 或 (low+high)>>1 来计算平均值呢?好在哪里?

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

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

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

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

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

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

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

  7. C# 基础 计算平均值的方法

    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. 3.Functions-函数(Dart中文文档)

    初次翻译,部分内容并非按字面翻译,是按本人理解进行了内容重组.如有错误望指正. Dart是完全的面向对象的语言,甚至函数也是一个Function类型的对象.这意味着函数可以赋值给变量或者作为函数的参数 ...

  2. spring-data-jpa快速入门(二)——简单查询

    一.方法名解析 1.引言 回顾HelloWorld项目中的dao接口 public interface GirlRepository extends JpaRepository<Girl, In ...

  3. 20155207王雪纯 Exp2 后门原理与实践

    20155207王雪纯 Exp2 后门原理与实践 实验步骤 一.windows获取Linux shell Windows:使用 ipconfig 命令查看当前机器IP地址. 进入ncat所在文件地址, ...

  4. 2017战略No.1:坚定不移地走全产业链发展路线

    编者按:2016年9月9日,首次公开表达"我想走全产业链发展路线"的想法. 这几个月,认真思考了下这个决定背后的原因.目的和价值. 付出常人5倍以上的努力,先抓住"技术研 ...

  5. 【转载】D3D中的Texture应用示例

    原文:D3D中的texture应用示例 本文列举了Direct3D中各种纹理应用实现:黑暗贴图,发光贴图,漫反射映射贴图,细节纹理,纹理混合,有较详尽的注解.其中黑暗贴图,发光贴图,细节纹理都是采用多 ...

  6. CodeForces 985D Sand Fortress

    Description You are going to the beach with the idea to build the greatest sand castle ever in your ...

  7. JS ,substr、 substring、charAt方法的区别

    JS 截取字符串substr 和 substring方法的区别,需要的朋友可以参考下,根据需要自行选择. substr 方法 返回一个从指定位置开始的指定长度的子字符串. stringvar.subs ...

  8. Jmeter中正则表达式提取器

    在使用Jmeter过程中,会经常使用到正则表达式提取器提取器,虽然并不直接涉及到请求的测试,但是对于数据的传递起着很大的作用,本篇博文就是主要讲解关于正则表达式及其在Jmeter的Sampler中的调 ...

  9. 网格系统-bootStrap4常用CSS笔记

    .row 定义一行 .col 均分列数,最多一行12列.每列左右间隙各15px .col-{1到12} 定义在所有屏幕下的列宽 .col-{sm|md|lg|xl}-{1到12} 定义在指定屏幕下该列 ...

  10. MATLAB复制图片时边框大的问题

    当使用MATLAB画图时,需要将图片复制到word中,会发现图片有一个白色的边框,在论文的排版中是一个影响美观的问题 例如: >> x = 0:10; >> y = sin(x ...