求C++ 程序有n个整数,使前面各数顺序向后移动m个位置,最后m个数变成最前面的m个数


您好,这里可以用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,
*/