重新排列一个数组,使得 arr[i] = i 在 C++ 中
我们得到一个正整数类型数组,比方说,任何给定大小的arr[],这样数组中的元素的值应该大于0但小于数组的大小。任务是以这样的方式重新排列数组,如果arr[i]是'i',如果'i'存在于数组中,否则它将设置arr[i]元素的值为-1并打印最终的结果。
让我们看看这个的各种输入输出场景-
输入 -intarr[]={0,8,1,5,4,3,2,9}
输出 -数组的重新排列使得arr[i]=i为:012345-1-1
说明 -我们给定一个大小为8的整数数组,数组中的所有元素都小于8。现在,我们将重新排列数组,即
arr[0] = 0(present in an array) arr[1] = 1(present in an array) arr[2] = 2(present in an array) arr[3] = 3(present in an array) arr[4] = 4(present in an array) arr[5] = 5(present in an array) arr[6] = -1(NOT present in an array) arr[7] = -1(NOT present in an array)
输入 -intarr[]={1,2,6,9,10}
输出 -重新排列数组,使得arr[i]=i为:-112-1-1
说明 -我们给定一个大小为5的整数数组,数组中的所有元素都小于5。现在,我们将重新排列数组,即
arr[0] = -1(NOT present in an array) arr[1] = 1(present in an array) arr[2] = 2(present in an array) arr[3] = -1(NOT present in an array) arr[4] = -1(NOT present in an array)
下面程序中使用的方法如下
输入整数类型元素的数组并计算数组的大小。
排列前打印数组并调用函数Rearranging(arr,size)
函数内部Rearranging(arr,size)
声明一个整数类型变量比方说,ptr
从i到0开始循环FOR,直到i小于size。在循环内,从j到0开始另一个循环FOR,直到j小于size。
在循环内,检查IFarr[j]=i然后设置ptr=arr[j],arr[j]到arr[i],arr[i]到ptr并中断。
从i开始循环FOR直到i小于size。在循环内,检查IFarr[i]!=i然后将arr[i]设置为-1。
在数组的值重新排列后打印数组。
示例
#include <iostream>
using namespace std;
void Rearranging(int arr[], int size){
int ptr;
for(int i = 0; i < size; i++){
for(int j = 0; j < size; j++){
if(arr[j] == i){
ptr = arr[j];
arr[j] = arr[i];
arr[i] = ptr;
break;
}
}
}
for(int i = 0; i < size; i++){
if(arr[i] != i){
arr[i] = -1;
}
}
}
int main(){
int arr[] = {0, 8, 1, 5, 4, 3, 2, 9 };
int size = sizeof(arr) / sizeof(arr[0]);
//调用函数重新排列数组,使得arr[i]=i
Rearranging(arr, size);
//打印数组
cout<<"Rearrangement of an array such that arr[i] = i is: ";
for(int i = 0; i < size; i++){
cout << arr[i] << " ";
}
}输出结果如果我们运行上面的代码,它将生成以下输出
Rearrangement of an array such that arr[i] = i is: 0 1 2 3 4 5 -1 -1