C++ doubt : arrays

Problem Code: JAVELIN

I am not very comfortable with c++ and working with pointers and arrays. can you please help me with the following code? It’s giving WA.

#include <iostream>
#include <algorithm>

using namespace std;

int getIndexOfMax(int *arr,int n){
    int ind=0,max=*arr;
    for(int i=1;i<n;i++){
        arr++;
        if(*arr>max){max=*arr;ind=i;}
    }
    return ind;
}

string stringIt(int *arr,int c){
    string s=""+to_string(*arr);
    for(int i=1;i<c;i++){
        s+=to_string(*arr++)+" ";
    }
    return s;
}

void merge(int *arr1,int *arr2,int *arr3,int c1,int c2){
    *arr3=*arr1;
    for(int i=0;i<c1;i++){
	arr3++;arr1++;
	*arr3=*arr1;
     }
    arr3=arr2;
    for(int i=0;i<c2;i++){
	arr3++;arr2++;
	*arr3=*arr2;
     }
}

int main() {
	// your code goes here
	int t;
	cin>>t;
	string L[t];
	for(int i=0; i<t;i++){
	    int n,m,x; cin>>n>>m>>x;
	    int arr[n],arr1[x],arr2[m-x];
	    int c1=0,c2=0;
	    for(int j=1; j<=n;j++){
	        int a; cin>>a;
	        if(a>=m){
	            if(c1<x-1){arr1[c1]=j;c1+=1;}
	            else{arr2[c2]=j;c2+=1;}
	            arr[j-1]=0;}
	        else{arr[j-1]=a;}
	    }
	    if (c1+1==x){
	        int arr3[c1+c2+2];
	        merge(arr1,arr2,arr3,c1+1,c2+1);
	        sort(arr3,arr3+c1+c2+2);
	        L[i]=stringIt(arr3,c1+c2+2)+"\n";
	    }
	    else{
    	    while(c1<x-1){
	            arr1[c1]=getIndexOfMax(arr,n)+1;
	            c1+=1;
	        }
		sort(arr1,arr1+c1+1);
	        L[i]=stringIt(arr1,c1+1)+"\n";
	    }
	}
	for (int i=0; i<t;i++){
	    cout<<L[t];
	}
	
	return 0;
}


thank you

1 Like

This works

#include <iostream>
#include <algorithm>

using namespace std;

int getIndexOfMax(int *arr,int n){
    int ind=0,max=*arr;
    for(int i=1;i<n;i++){
        arr++;
        if(*arr>max){max=*arr;ind=i;}
    }
    return ind;
}

string stringIt(int *arr,int c){
    string s=to_string(*arr)+" ";
    for(int i=1;i<c;i++){
	    arr++;
        s+=to_string(*arr)+" ";
    }
    return s;
}

void merge(int *arr1,int *arr2,int *arr3,int c1,int c2){
    *arr3=*arr1;
    for(int i=1;i<c1;i++){
    	arr3++;arr1++;
    	*arr3=*arr1;
     }
    arr3++;
    *arr3=*arr2;
    for(int i=1;i<c2;i++){
    	arr3++;arr2++;
    	*arr3=*arr2;
     }
}

int main() {
	// your code goes here
	int t;
	cin>>t;
	string L[t];
	for(int i=0; i<t;i++){
	    int n,m,x; cin>>n>>m>>x;
	    int arr[n],arr1[x],arr2[n-x];
	    int c1=0,c2=0;
	    for(int j=1; j<=n;j++){
	        int a; cin>>a;
	        if(a>=m){
	            if(c1<x){arr1[c1]=j;c1+=1;}
	            else{arr2[c2]=j;c2+=1;}
	            arr[j-1]=0;}
	        else{arr[j-1]=a;}
	    }
	    if (c1==x & c2>0){
	        int arr3[c1+c2];
	        merge(arr1,arr2,arr3,c1,c2);
	        sort(arr3,arr3+c1+c2);
	        L[i]=to_string(x+c2)+" "+stringIt(arr3,c1+c2)+"\n";
	    }
	    else{
    	    while(c1<=x){
    		    int o=getIndexOfMax(arr,n);
    		    arr[o]=0;
	            arr1[c1]=o+1;
	            c1+=1;
	        }
		    sort(arr1,arr1+x);
	        L[i]=to_string(x)+" "+stringIt(arr1,x)+"\n";
	    }
	}
	for (int i=0; i<t;i++){
	    cout<<L[i];
	}
	
	return 0;
}