如何解决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,你能帮我找出问题所在吗?我一直在测试这个程序并且它运行良好
解决方法
您在未初始化的情况下使用了变量 A
和 B
。这种未初始化的局部变量的初始值是不确定的。您必须添加一些代码才能不使用此类不确定值。
例如:
#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 的问题是由于 A 和 B 未正确初始化而导致的“不确定行为”。
只是为了好玩,我想提供一个类似的解决方案,它不需要额外的变量“bool AB_valid”。在此解决方案中,您可以直接在函数的开头直接初始化 A 和 B 的值。
我了解到每个变量都必须正确初始化,并且为了清楚起见,还应该在单独的一行中列出。
#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 举报,一经查实,本站将立刻删除。