注册 登录
编程论坛 C++教室

关于数组元素向后移

丘汤媚 发布于 2014-03-03 21:09, 485 次点击
#include<iostream>
using namespace std;
int main()
{
 int i,k,t,s[10]={1,2,3,4,5,6,7,8,9,10};
 for(i=0;i<10;i++)
     cout<<s[i]<<' ';
 cout<<endl;
 for(k=0;k<3;k++)
 {   t=s[9];
     for(i=9;i<=1;i--)
         s[i]=s[i-1];
     s[0]=t;
 }
 for(i=0;i<10;i++)
     cout<<s[i]<<' ';
 cout<<endl;
 return 0;
}
我想输出的是8,9,10,1,2,3,4,5,6,7,但是只输出10,2,3,4,5,6,7,8,9,10
2 回复
#2
wp2319572014-03-03 21:40
程序代码:
#include <stdio.h>

int main()
{
    int t[10]={1,2,3,4,5,6,7,8,9,10};
    int tmp[3];
    int i;
    for(i=7;i<10;i++) tmp[i-7]=t[i];
    for(i=9;i>2;i--) t[i]=t[i-3];
    for(i=0;i<3;i++) t[i]=tmp[i];
    for(i=0;i<10;i++) printf("%3d",t[i]);
    printf("\n");
    return 0;
}
#3
rjsp2014-03-04 08:56
程序代码:
#include <iostream>
#include <iterator>
#include <algorithm>

int main()
{
    int s[] = {1,2,3,4,5,6,7,8,9,10};

    ///////////////////////////////////////
   

    const size_t n = sizeof(s)/sizeof(s[0]);

    std::copy( s+0, s+n, std::ostream_iterator<int>(std::cout," ") );
    std::cout << std::endl;

    std::rotate( s+0, s+7, s+n );

    std::copy( s+0, s+n, std::ostream_iterator<int>(std::cout," ") );
    std::cout << std::endl;

    return 0;
}

如果你想知道 std::rotate 可以直接看其源代码,我大致讲解一下:
a. 求 移动距离 和 总长度 的 最大公约数
b. 循环 最大公约数 次,每次以 最大公约数 为步长环形移动一下
1