You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C++中不使用数组求整数最大值?附错误代码排查

问题分析与解决方案

任务要求

给定一组整数,找出其中的最大值。

  • 输入说明:先输入整数N(1≤N≤105),代表待输入的整数个数;下一行输入N个空格分隔的整数(范围为−1018≤ai≤10^18)。
  • 输出说明:输出这组整数的最大值。
  • 示例:
    输入:
    4
    3 5 1 4
    
    输出:5

你的代码问题

你提供的代码在处理全负数输入时会出错,比如输入所有数都是负数的测试用例,代码会错误输出0。此外代码存在非标准写法问题:

#include<iostream>
using namespace std; 
void main()
{
long long b,c=0;
int a;
cin>>a;
for (int i = 0; i<a ; i++)
{
cin>>b;
if (b>=c)
c=b;
else
c=c;
}
cout<<c;
}

错误原因

  1. 初始最大值设置错误:你把c初始化为0,但如果所有输入的整数都是负数,实际最大值是其中最大的负数,而代码会保留0作为结果,导致错误。
  2. 非标准主函数写法:void main()不是C++标准写法,标准要求主函数返回int类型,即int main(),并在末尾返回0。

修正后的代码

方法1:用第一个输入的数初始化最大值

这种方法不需要依赖头文件的极值常量,更直观:

#include<iostream>
using namespace std; 

int main()
{
    int a;
    cin >> a;
    long long c;
    // 先读第一个数作为初始最大值
    cin >> c;
    for (int i = 1; i < a; i++)
    {
        long long b;
        cin >> b;
        if (b > c)
            c = b;
    }
    cout << c;
    return 0;
}

方法2:用最小极值初始化最大值

如果担心第一个数读取的边界情况,可以用long long类型的最小值初始化:

#include<iostream>
#include<climits> // 引入LLONG_MIN的头文件
using namespace std; 

int main()
{
    int a;
    cin >> a;
    long long c = LLONG_MIN; // 初始化为long long的最小值
    for (int i = 0; i < a; i++)
    {
        long long b;
        cin >> b;
        if (b > c)
            c = b;
    }
    cout << c;
    return 0;
}

不使用数组的实现思路

你当前的代码其实已经没有使用数组——不需要存储所有输入的整数,只需要在遍历每个数时,维护一个记录当前最大值的变量(比如上面的c)。每读入一个数,就和当前最大值比较,更新最大值即可。这种方法的空间复杂度是O(1),非常高效,完全符合题目要求。

内容的提问来源于stack exchange,提问作者Ahmed Reda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 20:25:12