微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C++ 中的简单统计实现

如何解决C++ 中的简单统计实现

说明

先生Dengklek 有 N 个整数。在这些数字中,确定最大和最小的数字。

输入格式

第一行包含一个整数 N。下一行包含 N 个整数。

输出格式

A 行包含 A B,其中 A 是最大的数字,B 是最小的数字。

输入示例

8

1 -1 1 10 10 6 8 4

示例输出

10 -1

限制

1 ≤ N ≤ 100

-100,000 ≤(第二行的每个整数)≤ 100,000

#include <iostream>
using namespace std;
int main(){
  int N,A,B,temp;
  while (true)
  {
    cin >> N;
    if(N > 0 && N <= 100){
      break;
    }
  }

  for (int i = 0; i < N; i++)
  {
    cin >> temp;
    if(temp >= -100000 && temp <= 100000){
      if(temp < A && temp < B){
        B = temp;
      }
      else if(temp > B && temp > A){
        A = temp;
      }
    }
    else{
      i--;
    }
    
  }
  cout << A << endl;
  cout << B << endl;
  return 0;
  
  
}

在这个问题中得到了 WA 和 0pts,你能帮我找出问题所在吗?我一直在测试这个程序并且它运行良好

解决方法

您在未初始化的情况下使用了变量 AB。这种未初始化的局部变量的初始值是不确定的。您必须添加一些代码才能不使用此类不确定值。

例如:

#include <iostream>
using namespace std;
int main(){
  bool AB_valid = false; // add a flag to indicate if A and B has a valid value
  int N,A,B,temp;
  while (true)
  {
    cin >> N;
    if(N > 0 && N <= 100){
      break;
    }
  }

  for (int i = 0; i < N; i++)
  {
    cin >> temp;
    if(temp >= -100000 && temp <= 100000){
      if(AB_valid){ // check the flag
        // if A and B contains valid value,use them for calculation
        if(temp < A && temp < B){
          B = temp;
        }
        else if(temp > B && temp > A){
          A = temp;
        }
      }
      else{
        // if they doesn't contain valid value,assign the first value
        A = temp;
        B = temp;
        AB_valid = true;
      }
    }
    else{
      i--;
    }
    
  }
  cout << A << endl;
  cout << B << endl;
  return 0;
  
  
}
,

MikeCAT 的回答绝对正确。 OP 的问题是由于 AB 未正确初始化而导致的“不确定行为”。

只是为了好玩,我想提供一个类似的解决方案,它不需要额外的变量“bool AB_valid”。在此解决方案中,您可以直接在函数的开头直接初始化 AB 的值。

我了解到每个变量都必须正确初始化,并且为了清楚起见,还应该在单独的一行中列出

#include <iostream>

int main(){
  
  const int MAX = 100000;
  const int MIN = -100000;
  
  int N = 0;
  int A = MIN;
  int B = MAX;
  int temp = 0;
  
  while (true)
  {
    std::cin >> N;

    if(N > 0 && N <= 100){
      break;
    }
  }

std::cout << "\n ***  ";

  for (int i = 0; i < N; i++)
  {
    std::cin >> temp;
    if(temp >= MIN && temp <= MAX){
    
        // if A and B contains valid value,use them for calculation
        if( temp < B){
          B = temp;
        }
        
        if( temp > A){
          A = temp;
        }
    }        
    else
    {
      i--;
    }
    
  }

  std::cout << "\n Max = " << A ;
  std::cout << "\n Min = " << B ;

  return 0;  
  
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。