有一道c++题编程题,这个怎么写?
比较简单的做法是,开辟另一个数组,用于存储循环后移的元素,把后面的数据前移后,再把移出的数据移回原数组。这种做法,是“以空间换时间”的做法,增加了空间的开销,时间复杂度为O(n)。
#include
using namespace std;
int main()
{ int m,n,i,j,t,a[100],b[100];
cout<<"一维数组元素个数:";
cin>>m;
cout<<"请输入"<<m<<"个数据:";
for(i=0; i<m; i++)
cin>>a[i];
cout<<"\n请输入要移动的次数:";
cin>>n;
for(i=0; i<m; i++)
b[i]=a[i];
for(j=0,i=n;i<m;)
a[j++]=a[i++];
for(i=0;j<m;)
a[j++]=b[i++];
cout<<"\n移动后的结果是:";
for(i=0;i<m;i++)
cout<<a[i]<<" ";
cout<<"\n";
return 0;
}
按照题目要求编写的一维数组循环右移的C++程序如下
#include <iostream>
using namespace std;
int main()
{
int i,j,temp,n,times;
cout<<"一维数组元素个数:";
cin>>n;
cout<<"请输入"<<n<<"个数据:";
int a[n];
for(i=0;i<n;i++){
cin>>a[i];
}
cout<<"请输入要移动的次数:";
cin>>times;
for(i=0;i<times;i++){
temp=a[n-1];
for(j=n-2;j>=0;j--){
a[j+1]=a[j];
}
a[0]=temp;
}
cout<<"移动后的结果是:";
for(i=0;i<n;i++){
cout<<a[i]<<" ";
}
cout<<endl;
return 0;
}
#include <iostream>
using namespace std;//
#define N 6
int main(int argc,char *argv[]){
int n,i,j,k,a[N];
cout << "Please enter n(int n>=0)...\n";
if(!(cin >> n) || n<0){
cout << "Input error, exit...\n";
return 0;
}
for(i=0;i<N;a[i++]=i+1);
for(i=0;i<n;i++){
for(k=a[j=N-1];j>0;a[j--]=a[j-1]);
a[0]=k;
}
for(i=0;i<N;cout << a[i++] << ' ');
cout << endl;
return 0;
}