您好,这里可以用C++中的容器来实现,比较简单,所有的C++代码如下:
其中上面1个函数是实现移动功能的,3个for循环就OK了,其他输入输出交互在main函数中
void move_number(vector<int> &ivec,int m)
{
vector<int> tvec;
int k=0;
for (vector<int>::size_type index=0;index!=ivec.size()-m;++index)
{
tvec.push_back(ivec[index]);
}
for (vector<int>::size_type index=ivec.size()-m;index!=ivec.size();++index)
{
ivec[k++]=ivec[index];
}
for (vector<int>::size_type index=0;index!=tvec.size();++index)
{
ivec[m++]=tvec[index];
}
}
int main(void)
{
vector<int> ivec;
int n,m,k;
int count=0;
cout << "并码Please input how many number do you want to input:" ;
cin>>n;
cout << "兄滚Now input the " <<n <<"numbers :" ;
while(cin>>k)
{
ivec.push_back(k);
++count;
if (count==n)
break;
}
cout << "Please input the number m: " ;
cin>> m;
move_number(ivec,m);
for (vector<int>绝尘哪::const_iterator i_iter=ivec.begin();i_iter!=ivec.end();++i_iter)
{
cout << *i_iter << " " ;
}
}
运行结果如下:
这道题蛮有意思,所以花了点时间做了一下,要给分呀
如果可以申请内存的话,会更简单
麻烦,代码复制不能分行
// moveint.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "stdio.h"
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define MAXBUFFER 15
#define MOVESTEP 8
bool MoveInt(int * nListInt,int n , int m);
int main(int argc, char* argv[])
{
int nListInt[MAXBUFFER];
printf ("Old order[n=%d,m=%d]:\n"侍告,MAXBUFFER,MOVESTEP);
for ( int i = 0 ; i < MAXBUFFER ; i ++)
{
nListInt[i] = rand () % 99;
printf ("盯银%d,",nListInt[i]);
}
printf ("\nNew order:\n");
MoveInt((int*)nListInt,MAXBUFFER , MOVESTEP);
for ( i = 0 ; i < MAXBUFFER ; i ++)
{
printf ("%d,",nListInt[i]);
} getch(); return 0;}
bool MoveInt(int * nListInt,int n , int m)
{
if ( n <= 0 || m <= 0 || m >= n )
return false;
int nFirst = nListInt[0];//复制,保存第一个元素
int nIndex = 0;
int nNextIndex = 0;
do
{
if( nIndex >= m )
nNextIndex = nIndex - m;
else
nNextIndex = nIndex + (n - m);
if ( nNextIndex == 0)
{
nListInt[nIndex] = nFirst;
break;//第一个元素被复制后,完成循环
}
else
nListInt[nIndex] = nListInt[nNextIndex];//填充一个元素,该元素原有值已经被复制走
nIndex = nNextIndex;/老则明/第nNextIndex个元素已经被取走了,下次就可以安全的填写第nNextIndex个元素
} while (true);//因为是一一对应,所以遍历一次,即不会遗漏,也不会重复
return true;
}
/*
输出:
Old order[n=15,m=8]:
41,53,97,67,62,82,93,54,34,11,62,29,16,96,61,
New order:
54,34,11,62,29,16,96,61,41,53,97,67,62,82,93,
*/