填空题AB-换座位

填空题AB-换座位

时间: 1ms        内存:128M

描述:

注:本题只需要提交标记为修改部分之间的代码,请按照C++方式提交。

YT附小1年纪2班每周一换座位,采用循环移动,每个人换到自己右边的邻座,最右边的一个人换到最左边的位置。
假设一共m列座位,从第1列到第m列,列头学生的编号依次是K1,K2,K3,。。。,Km,求第n周后第1列到第m列列头学生的编号?

#include<iostream>
using namespace std;
void changenext(int *cols,int n)
{
    int save,i;
    save = *(cols+n-1);
    for(i=n-1; i>0; i--)
        *(cols+i)=*(cols+i-1);
    /*
        请填写该部分代码
    */

}
int main()
{
    int cols[80];
    int m,i,n;
    cin>>m>>n;
    for(i=0; i<m; i++)
        cin>>cols[i];
    for(i=0; i<n; i++)
        changenext(cols,m);  //换一次座位
    for(i=0; i<m; i++)
        cout<<cols[i]<<" ";
    return 0;
}

输入:

m和n
第1列到第m列每个学生的编号

输出:

第n周后第1列到第m列每个学生的编号

示例输入:

7 3
2 3 1 7 5 4 6

示例输出:

5 4 6 2 3 1 7 

提示:

参考答案(内存最优[1096]):

#include<stdio.h>
int main()
{
    int m,n,i;
    int a[50],b[50];
    scanf("%d%d",&m,&n);
    for(i=0;i<m;i++)
        scanf("%d",&a[i]);
    for(i=n;i<m;i++)
        b[i]=a[i-n];
    for(i=0;i<n;i++)
        b[i]=a[m-n+i];
    for(i=0;i<m;i++)
        printf("%d ",b[i]);
    return 0;
}

参考答案(时间最优[0]):


#include<iostream>
using namespace std;
void changenext(int *cols,int n)
{
    int save,i;
    save = *(cols+n-1);
    for(i=n-1; i>0; i--)
        *(cols+i)=*(cols+i-1);
    *cols=save;
}
int main()
{
    int cols[80];
    int m,i,n;
    cin>>m>>n;
    for(i=0; i<m; i++)
        cin>>cols[i];
    for(i=0; i<n; i++)
        changenext(cols,m);
    for(i=0; i<m; i++)
        cout<<cols[i]<<" ";
    return 0;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注