-
看到CSDN上的一个面试题,呵呵,很简单的,以开始想得复杂了,做题之前一定要好好想想!想清楚了再下手!用函数:moveSubArrayToTheEnd( int [] array, int numberOfElements)
传入一个数组如 {1,2,3,4,5,6,7}
将数组前面 head的一个子集移到数组末尾end
如input numberOfElements=3,则{1,2,3,4,5,6,7}=>{4,5,6,7,1,2,3}
input numberOfElements=5,则{1,2,3,4,5,6,7}=>{6,7,1,2,3,4,5}
如何写出该算法?
其实数组大小问题我很纠结,我也不知道该怎么处理它的大小问题,所以只能加个参数了,麻烦知道的朋友告诉我该怎么处理那个数组的大小问题吧,谢谢了。
#include <iostream>
#include <cstdlib>
using namespace std;
void MoveSubArrayToTheEnd(int array[],int arrayLength ,int numberOfElements)
{
int temp,n,i,j;
n=arrayLength-numberOfElements;
for(i=0;i<n;++i)
{
temp=array[arrayLength-1];
for(j=arrayLength-1;j>0;--j)
array[j]=array[j-1];
array[j]=temp;
}
}//MoveSubArrayToTheEnd
void print(int array[],int arrayLength)
{
for(int i=0;i<arrayLength;i++)
cout<<array[i]<<" ";
cout<<endl;
}
int main()
{
int array[7]={1,2,3,4,5,6,7};
int n=sizeof(array)/sizeof(int);
cout<<"The size of the array is:"<<n<<endl;
print(array,n);
MoveSubArrayToTheEnd(array,n,4);
cout<<"After the Reverse"<<endl;
print(array,n);
return 0;
}