算法经典题型7
数组中有n个数据,要将它们顺序循环向后移k位,即前面的元素向后移k位,后面的元素则循环向前移k位,例:1、2、3、4、5循环移3位后为:3、4、5、1、2。要求用3种算法设计思路实现。
用到的思想—算法设计基础与优化
博主用到的环境:Win7, CodeBlocks等。
一、代码
#include <iostream>
using namespace std;
int ff(int a, int b){
int i = 2; int t = 1;
while(i <= a && i <= b){
if(a%i==0 && b%i==0){
t *= i;
a /= i;
b /= i;}
else{i++;}}
return t;}
int main()
{
int a[100],b0,b1,i,j,n,k,m,tt, tmp, cnt,p;
cout<<"input the number of data: "<<endl;
cin>>n;
cout<<"input the distant of moving: "<<endl;
cin>>k;
for(int i=0;i<n;i++){
cin>>a[i];
}
m = ff(n, k);
for(j=0;j<m;j++){
p = j;
tmp = a[p];
tt = p;
for(i=0;i<(n/m)-1;i++){
tt = (n+tt-k)%n;
a[p] = a[tt];
p = tt;
}
}
a[p] = tmp;
for(i=0;i<n;i++){
cout<<a[i];
}
return 0;
}
二、测试
总结
谢谢宝宝们的阅读,有问题的话评论@我,没问题的话点个赞再走哦~