为什么这段代码崩溃了



Q.取一个长度为 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;
}

数组不是库。您必须删除:

#include <array>

//my answer

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+" ");
}

最新更新