jymdsj 2023-04-10 21:40 采纳率: 100%
浏览 12
已结题

关于c++数组的问题,如何解决?

题目:

img


我的做法:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    long long a[10000],b[10000],i,j,max=0,n;
    cin>>n;
    for(i=0;i<=n;i++)
    {
        cin>>a[i];
        if(a[i]>max)
        {
            max=a[i];
        }
    }
    for(i=0;i<=max;i++)
    {
        for(j=0;j<=max;j++)
        {
            if(a[j]==i)
            {
                b[i]+=1;
            }
        }
    }
    for(i=0;i<=max;i++)
    {
        cout<<b[i]<<endl;
    }
    return 0;
}

目前是错误的

  • 写回答

1条回答 默认 最新

  • CQ.abc 2023-04-10 22:16
    关注

    以下回答结合了ChatGPT:
    您的代码存在一些问题,主要有以下几点:

    1. 数组 b 没有进行初始化,导致输出结果不正确。
    2. 第一个 for 循环中的 i 的取值应该是从 0 到 n-1,而不是从 0 到 n。
    3. 第二个 for 循环中的 j 的取值应该是从 0 到 n-1,而不是从 0 到 max。因为数组中可能存在大于 n 的数,这样 j 的取值会越界。
      下面是修改后的代码:
    #include <bits/stdc++.h>
    using namespace std;
    int main() {
        long long a[10000], b[10000] = {0}, i, j, max = 0, n;
        cin >> n;
        for (i = 0; i < n; i++) {
            cin >> a[i];
            if (a[i] > max) {
                max = a[i];
            }
        }
        for (i = 0; i < n; i++) {
            b[a[i]] += 1;
        }
        for (i = 0; i <= max; i++) {
            cout << b[i] << endl;
        }
        return 0;
    }
    

    在第二个 for 循环中,直接根据输入的数值 a[i] 计算其在数组 b 中的下标,然后将相应下标的值加 1 即可。最后输出 b 数组即可。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 4月21日
  • 已采纳回答 4月13日
  • 创建了问题 4月10日

悬赏问题

  • ¥15 Oracle触发器记录修改前后的字段值
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器