PTA计算平均值(一波三折)
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计算平均值(一波三折)的更多相关文章
- PTA 计算平均值
现在为若干组整数分别计算平均值. 已知这些整数的绝对值都小于100,每组整数的数量不少于1个,不大于20个. 输入格式:首先输入K(不小于2,不大于20).接下来每一行输入一组数据(至少有一组数据), ...
- matlab 利用while循环计算平均值和方差
一.该程序是用来测输入数据的平均值和方差的 公式: 二. 项目流程: 1. State the problem假定所有测量数为正数或者0,计算这一系列测量数的平均值和方差.假定我们预先不知道有多少测量 ...
- 为什么在 Java 中用 (low+high)>>>1 代替 (low+high)/2 或 (low+high)>>1 来计算平均值呢?好在哪里?
>>>与>>是位运算符,只对整型有效(不能用于浮点型).当是整型的时候(low+high)>>1可以代替(low+high)/2.>>>是无 ...
- C 语言实例 - 计算平均值
C 语言实例 - 计算平均值 C 语言实例 C 语言实例 使用数组来计算几个数的平均值. 实例 #include <stdio.h> int main() { int n, i; ], s ...
- matlab 利用while循环计算平均值和方差(第二版)
第一版中因为公式中含有:分母项:n(n-1),而程序并没有对输入数进行判定,如果仅仅输入一个或者一个都不输入,将会出现除0的情况 基于此,进行第二版改进. 代码: % 脚本文件:states.m % ...
- Shell 脚本循环遍历日志文件中的值进行求和并计算平均值,最大值和最小值
本文为博主原创,转载请注明出处: 最近在进行压测,为了观察并定位服务性能的瓶颈,所以在代码中很多地方加了执行耗时的日志,但这种方式只能观察,却在压测的时候,不太能准确的把握代码中某些方法的性能,所以想 ...
- C# 基础 计算平均值的方法
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- OpenCV 自定义任意区域形状及计算平均值 方差
opencv中有矩形的Rect函数.圆形的circl函数等,那么任意形状怎么取呢?方法1:点乘,将其形状与图像进行点乘,求其形状对应的图像形状:方法2:用findContours函数得对应的形状区域, ...
- 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 ...
随机推荐
- elasticsearch 请求体查询方式整理
空查询(empty search) —{}— 在功能上等价于使用 match_all 查询, 正如其名字一样,匹配所有文档: GET /_search { "query": { & ...
- Datax3.0使用说明
一.datax3.0介绍 1.DataX 是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL.Oracle等).HDFS.Hive.ODPS.HBase.FTP等各种异构数据源之间稳 ...
- json keyname map
var obj = { fname:'zhao', lname:'yao', parents:{ father:'zhao' }, children:[ { dname:'zhaoyiyi' } ] ...
- 20155332 补交ch12课下作业
20155332 补交ch12课下作业 课下测试提交晚了,我课后补做了一遍,答对13题,答错3题. 试题内容如下所示: 课本内容 1.并发(Concurrency) 访问慢I/O设备:就像当应用程序等 ...
- WPF不同线程之间的控件的访问
原文:WPF不同线程之间的控件的访问 WPF不同线程之间的控件是不同访问的,为了能够访问其他线程之间的控件,需要用Dispatcher.Invoke执行一个新的活动即可. 例如: public voi ...
- 【python3】将视频转换为代码视频
一.环境准备 1.需要安装opencv,直接安装 pip install opencv-python 2.需要安装ffmpeg ,直接解压免安装,下载传送门: 将 ffmpeg.exe 的路径复制,替 ...
- c++ 菜单动态效果
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> ...
- [Windows]_[中级]_[崩溃报告的中级解决方案]
场景 1.在Windows上用C/C++开发软件, 经常会出现软件级别的崩溃情况, 如果用户看到这种崩溃报告, 那么一般会认为软件质量不高, 从而不想用. Windows上就会有崩溃报告这种噢给你工具 ...
- 6-[多线程]-互斥锁、GIL、死锁、递归锁、信号量
1.互斥锁(排他锁) (1)不加锁的情况下 并发控制问题:多个事务并发执行,可能产生操作冲突,出现下面的3种情况 丢失修改错误 不能重复读错误 读脏数据错误 # mutex from threadin ...
- 2 timeit模块,python中数据结构
1.timeit模块:代码事件测量模块 timeit模块可以用来测试一小段Python代码的执行速度. class timeit.Timer(stmt='pass', setup='pass', ti ...