【问题标题】:why this code is getting crashed为什么这段代码会崩溃
【发布时间】:2018-10-28 18:09:45
【问题描述】:

问。取一个长度为 n 的数组,其中所有数字都是非负的且唯一的。找到数组中具有最高值的元素。将元素分成两部分,其中第一部分包含数组中的下一个最高值,第二部分包含所需的附加实体以获得最高值。打印最高值被分成这两个部分的数组。 样本输入:4 8 6 3 2 样本输出:4 6 2 6 3 2

#include <array>
#include <iostream>

using namespace std;

int main () {
    int n, i, b, c, m;
    cin >> n;
    int a[ n ];
    int z[ n + 1 ];
    b = a[ 0 ];
    c = a[ 0 ];

    for (i = 0; i < n; i++)
        cin >> a[ i ];
    for (i = 0; i < n; i++) {
        if (b < a[ i ])
            b = a[ i ];
    }
    for (i = 0; i < n; i++) {
        if (c < a[ i ] && a[ i ] != b)
            c = a[ i ];

        if (a[ i ] == b)
            m = i;
    }
    for (i = 0; i < m; i++) {
        z[ i ] = a[ i ];
    }
    for (i = m + 2; i < n + 1; i++) {
        z[ i ] = a[ i - 1 ];
    }
    z[ m ] = c;
    z[ m + 1 ] = b - c;
    for (i = 0; i < n + 1; i++)
        cout << z[ i ] << endl;
    return 0;
}

【问题讨论】:

  • “崩溃”是什么意思?不编译?你得到一个运行时错误?其次,这个:int a[n];int z[n+1]; -- 无效C++。 C++ 中的数组必须具有由常量表达式而不是变量表示的条目数。相反,请使用std::vector&lt;int&gt;
  • 一个问题是bc 被设置为a[0] 将值读入a
  • 您的示例输出现在包含非唯一值 6 和 2。这是否允许?
  • 为什么我们必须猜测这是运行时错误还是编译错误?我会说你的格式风格是你现在最大的敌人。
  • 这是一个运行时错误,顺便说一句,感谢你们所有人,我将改进我的格式样式,因为我开始编程只有一个星期。

标签: c++


【解决方案1】:

array 不是库。您必须删除:

#include <array>

【讨论】:

    【解决方案2】:

    //我的回答

        Scanner sc= new Scanner(System.in);
        System.out.println("define length of array");
        int l =sc.nextInt();
        int [] arr =new int[l];
        System.out.println("enter elements");
        for (int i =0;i<l;i++){
            int flag=0;
            int a = sc.nextInt();
            for (int e : arr) {
                if(e==a){
                    flag=1;
                    break;
                }
            }
            if (flag==0){
                arr[i]=a;
            }
            else {
                System.out.println("enter unique no.");
                break;
            }
        }
        int [] arr2 = new int[l+1];
        int max=arr[0];
        int second_max=arr[0];
        int j=0;
        for (int i=0;i<l;i++){
            if(arr[i]>max){
                max=arr[i];
                j=i;
            }
        }
        for (int i =0;i<l;i++){
            if (arr[i]>second_max && arr[i]<max){
                second_max=arr[i];
            }
        }
        for (int i= 0;i<j;i++){
            arr2[i]=arr[i];
        }
        arr2[j]=second_max;
        arr2[j+1]=max-second_max;
        for (int i=j+2;i< arr2.length;i++){
            arr2[i]=arr[i-1];
        }
        for (int e:arr2){
            System.out.print(e+" ");
        }
    

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    • 虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-28
    • 2014-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多