问题:设将n(n>1)个整数存放到一维数组R中。设计一个算法,将R中的序列循环左移p(0<p<n)个位置,即将R中的数据由{X0,X1,...,Xn-1}变换为{Xp,Xp+1,...,Xn-1,X0,X1,...,Xp-1}。要求:写出本题的算法描述。
分析:
本题不难,要实现R中序列循环左移p个位置,只需先将R中前p个元素逆置,再将剩下的元素逆置,最后整体逆置操作即可。本题算法描述如下:
1 #include <iostream> 2 using namespace std; 3 #define MAX 100 4 void Nizhi(int R[],int m,int n)//对从m到n之间的元素进行逆置操作 5 { 6 int temp; 7 for (int i=m,int j=n;i<j;++i,--j){ 8 temp=R[i]; 9 R[i]=R[j]; 10 R[j]=temp; 11 } 12 } 13 void Diaoyong(int R[],int n,int p){//调用逆置操作的函数 14 if (p<=0||p>=n)//判断左移的个数是否合理 15 cout<<"ERROR"<<endl; 16 else 17 { 18 Nizhi(R,0,p-1);//从R[0]到R[p-1]之间的元素进行逆置操作 19 Nizhi(R,p,n-1);//从R[p]到R[n-1]之间的元素进行逆置操作 20 Nizhi(R,0,n-1);//从R[0]到R[n-1]之间的元素进行逆置操作 21 } 22 } 23 int main(void) 24 { 25 int n,p; 26 int R[MAX]; 27 cin>>p;//输入左移的位数 28 cin>>n;//输入总共元素的个数 29 for (int i=0;i<n;i++)//对数组进行初始化 30 cin>>R[i]; 31 Diaoyong(R,n,p);//调用函数 32 for (int i=0;i<n;i++) 33 cout<<R[i]<<" ";//对左移p个位置的数组R进行输出 34 cout<<endl; 35 return 0; 36 }
以上程序是一段完整的可在编译器下运行的程序,如果对于考生答卷,在试卷上给出算法的描述,完全没有必要这么写,对于研究生选拔性考试,只需要写出函数的说明,给出函数的接口即可,阅卷老师就会知道你已经做好了解决这个问题的工具(函数),并且说明了工具的使用方法(接口)。因此,我们只需要给出第4行到22行的代码,这样显然简洁了很多。
void Nizhi(int R[],int m,int n)//对从m到n之间的元素进行逆置操作 { int temp; for (int i=m,int j=n;i<j;++i,--j){ temp=R[i]; R[i]=R[j]; R[j]=temp; } } void Diaoyong(int R[],int n,int p){//调用逆置操作的函数 if (p<=0||p>=n)//判断左移的个数是否合理 cout<<"ERROR"<<endl; else { Nizhi(R,0,p-1);//从R[0]到R[p-1]之间的元素进行逆置操作 Nizhi(R,p,n-1);//从R[p]到R[n-1]之间的元素进行逆置操作 Nizhi(R,0,n-1);//从R[0]到R[n-1]之间的元素进行逆置操作 } }
通过以上说明,可以把接口理解为用户和函数打交道的地方,通过接口,用户输入了自己的数据,得到了想要的结果
至此,我们可以知道考研综合应用中算法设计题中的代码部分重点需要写那些内容了,即只需写出一个或多个可以解决此问题的有着清楚接口描述的函数即可。
时间: 2024-12-17 23:35:11