posts - 0,comments - 0,trackbacks - 0
开始重识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)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航:   博客园   博客园最新博文   博问   管理