开始重识C++,从一个小题开始——对一个一维数组实现左移P位。
方法一:
#include<iostream>
using namespace std;
int main()
{
int a[10]={0,1,2,3,4,5,6,7,8,9};
int b[10];
int k;
for(int i=0;i<10;i++)
cout<<a[i]<<" ";
cout<<endl;
int p;
cout<<"实现循环左移P位"<<endl;
cin>>p;
for(i=0;i<10;i++)
{
k=i-p;
if(k<0)
{
k=10+k;
}
b[k]=a[i];
}
for(i=0;i<10;i++)
cout<<b[i]<<" ";
cout<<endl;
return 0;
}
方法二:利用逆置。左移P个位置,只需先将前P个元素逆置,再将剩下的元素逆置,最后将所有元素逆置一次即可
#include<iostream>#define N 50
using namespace std;
void Reverse(int R[],int l,int r)
{
int i,j;
int temp;
for(i=l,j=r;i<j;i++,--j)
{
temp=R[i];
R[i]=R[j];
R[j]=temp;
}
}
void RCR(int R[],int n,int p)
{
if(p<=0||p>=n)
{
cout<<"ERROR"<<endl;
}
else
{
Reverse(R,0,p-1);
Reverse(R,p,n-1);
Reverse(R,0,n-1);
}
}
int main()
{
int p,i;
int a[10]={0,1,2,3,4,5,6,7,8,9};
for(i=0;i<10;i++)
cout<<a[i]<<" ";
cout<<endl;
cout<<"实现循环左移P位"<<endl;
cin>>p;
RCR(a,10,p);
for(i=0;i<10;i++)
cout<<a[i]<<" ";
cout<<endl;
return 0;
}
posted on 2012-08-20 15:26
yyj 阅读(176)
评论(0) 编辑 收藏 引用