老师说循环不对啊

5. 神奇的计算

题目ID:1146必做题0分

最新提交:

Wrong Answer

0 分

历史最高:

Wrong Answer

0 分

时间限制: 1000ms

空间限制: 65536kB

题目描述

编程是很有趣的一门学科,你可以使用程序来完成很多事情。现在老师遇到困难了,他想快速求出一组数据的最大值,最小值,平均值,但是他又不想一个个去计算。老师需要你的帮助,你能求出它们的最大值、最小值,以及平均值么?

输入格式

若干个实数(浮点数或整数)��xi​,最后以 -1 作为输入的结束。

输出格式

三个实数,每个一行,分别代表最大值、最小值、平均值,保留 6 位小数。

样例

Input 1

1 2 3 4 5 -1

Output 1

5.000000 1.000000 3.000000

样例解释

输入的数据为1, 2, 3, 4, 5,以-1结束。最大值为5.000000,最小值为1.000000,平均值为3.000000。

数据范围

我的代码:

#include <bits/stdc++.h>

using namespace std;

int main (){
  double minn , maxx , x , y , p;
  while ( x != -1 && y != -1) {
   cin >> x >> y;
    minn = min(x,y);
    maxx = max(x,y);
    p = x * y / 2 ;
  }
  cout <<fixed <<setprecision(6) << maxx <<endl << minn <<endl << p;
  return 0;
}

大错特错。
每次输入一个数,和目前的minn、maxx作比较,加到sum里,统计数量
最后平均值用sum除以数量

1 个赞

@叶安槿

#include <bits/stdc++.h>

using namespace std;

int main (){
  double x , maxx = -9999 , minn = 9999 , suma = 0, sumi = 0 , p = 0 , sum , sumaa , sumia;
  while ( cin >> x ){
    if ( x != -1 ) {
    if ( x > maxx ) {
      	suma = x;
      	sumaa = max (suma , x) ;
    }
    if ( x > minn ) {
    	sumi = x;
		sumia = min (sumi , x) ;
    }
    p = p + x;
      sum++;
  }
  else if ( x == -1) {
  	break;
  } 
  }
  p = p / sum;
  cout << fixed << setprecision (6) << sumaa << endl << sumia << endl << p;
  return 0;
}

最小值还是错的

有没有可能你把输入 sort 一下就好了

代码全错了:
sum 作为局部变量应初始化,不然会是一个不知道的值,就有可能出错,应改为:

sum = 0 ;
if ( x > maxx ) {
	suma = x ;
	sumaa = max (suma , x) ;
}
if ( x > minn ) {
	sumi = x ;
	sumia = min (sumi , x) ;
}

xmaxxminn 比较,可更新的是 sumaasumia ,那就不对了;
sumasumi 都设为 x ,就相当于 max(x,x)min(x,x) ,完全就错了;
而且, x > minnx 就一定不会比 minn 小, minn 就一定不会是最小的;
max()min() 函数本身就是在获取 较大数 和 较小数 的,没必要 if 判断,应改为:

maxx = max (maxx , x) ;
minn = min (minn , x) ;

数据可能会很大, minn 初始化为 9999 不够,万一输入都比 9999 大结果就会输出 9999maxxminn 应初始化 最小 和 最大(要维护 最大 和 最小,初始化就必须非常 小 和 大)
可以用 DBL_MINDBL_MAX 获取 double 能存的 最小值 和 最大值 来初始化:

maxx = DBL_MIN , minn = DBL_MAX ;

最后输出 maxxminn 就行了, sumasumisumaasumia 都可以删了

cout << fixed << setprecision (6) << maxx << endl << minn << endl << p ;
1 个赞

谢谢