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

C++实现数组素数等统计功能提交Codeforces测试点5报错求解

问题分析与修复方案

核心错误点

  • 头文件缺失:代码中使用了INT_MIN、INT_MAX常量,但未引入<climits>头文件,部分编译器会触发未定义行为。
  • prime函数逻辑错误:判断arr[i]是否为素数时,错误使用数组长度n作为循环判断的上限,和判断素数的逻辑完全不符。比如测试用例中的素数5,当循环变量j增加到5时,会触发5%5==0的判断,直接将5误判为非素数,导致素数统计结果出错。
  • 隐性逻辑风险:prime函数中的flag变量没有在每次处理新元素前重置,虽然当前逻辑不会触发错误,但存在残留状态影响结果的风险。

修正后的完整代码

#include <iostream>
#include <math.h>
#include <climits>
using namespace std;
int maximum(int arr[], int n)
{
    int max = INT_MIN;
    for (int i = 0; i < n; i++)
    {
        if (max < arr[i]) { max = arr[i]; }
    }
    return max;
}
int minimum(int arr[], int n)
{
    int min = INT_MAX;
    for (int i = 0; i < n; i++)
    {
        if (min > arr[i]) { min = arr[i]; }
    }
    return min;
}
int prime(int arr[], int n)
{
    int con = 0;
    for (int i = 0; i < n; i++)
    {
        bool flag = true;
        if (arr[i] <= 1) continue;
        if (arr[i] == 2)
        {
            con++;
            continue;
        }
        if (arr[i] % 2 == 0) continue;
        for (int j = 3; j <= sqrt(arr[i]); j += 2)
        {
            if (arr[i] % j == 0)
            {
                flag = false;
                break;
            }
        }
        if (flag == true)
            con++;
    }
    return con;
}
int palindrome(int arr[], int n)
{
    int i = 0, con = 0;
    while (n--)
    {
        int temp;
        temp = arr[i];
        int reverseNumber = 0, rightDigit;
        while (temp != 0)
        {
            rightDigit = temp % 10;
            reverseNumber = (reverseNumber * 10) + rightDigit;
            temp = temp / 10;
        }
        if (reverseNumber == arr[i]) {
            con++;
        }
        i++;
    }
    return con;
}
int divisors(int arr[], int n)
{
    int max = 0;
    int con = 0;
    int x = arr[0];
    for (int i = 0; i < n; i++)
    {
        con = 0;
        for (int j = 1; j <= sqrt(arr[i]); j++)
        {
            if (arr[i] % j == 0)
            {
                con++;
                if (j != arr[i]/j) con++;
            }
        }
        if (max < con)
        {
            max = con;
            x = arr[i];
        }
        else if (max == con)
        {
            if (x < arr[i])
            {
                x = arr[i];
            }
        }
    }
    return x;
}
int main()
{
    int n; cin >> n;
    int arr[1001];
    for (int i = 0; i < n; i++)
        cin >> arr[i];
    cout << "The maximum number : " << maximum(arr, n) << endl;
    cout << "The minimum number : " << minimum(arr, n) << endl;
    cout << "The number of prime numbers : " << prime(arr, n) << endl;
    cout << "The number of palindrome numbers : " << palindrome(arr, n) << endl;
    cout << "The number that has the maximum number of divisors : " << divisors(arr, n) << endl;
    return 0;
}

优化说明

  • 修正了素数判断的循环上限逻辑,同时加入了偶数跳过的优化,执行效率更高
  • 优化了约数统计的逻辑,循环上限改为sqrt(arr[i]),时间复杂度从O(n)降到O(√n)
  • 补全了缺失的头文件,消除了未定义行为风险

内容的提问来源于stack exchange,提问作者Mostafa Mohamed Taha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 09:09:02