|曦光| 2022-05-02 18:15 采纳率: 100%
浏览 35
已结题

自测-3 数组元素循环右移问题

一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,

如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?

输入格式:
每个输入包含一个测试用例,第1行输入N(1≤N≤100)和M(≥0);第2行输入N个整数,之间用空格分隔。

输出格式:
在一行中输出循环右移M位以后的整数序列,之间用空格分隔,序列结尾不能有多余空格。

输入样例:
6 2
1 2 3 4 5 6
输出样例:
5 6 1 2 3 4


#include<stdio.h>
int main()
{
    int a,b;
    int i,j;
    int c[999]= {0};
    int flag1=0,flag2=0;
    scanf("%d%d",&a,&b);
    for(i=1; i<=a; i++)
    {
        c[i]=i;

    }
    if(b==0)
    {
        printf("%d",c[1]);
        for(i=2;i<=a;i++)
        {
            printf(" %d",c[i]);
        }
    }
    if(b<=a&&b!=0)
    {

        for(j=a-b+1; j<=a; j++)
        {
            if(flag1==0)
                printf("%d",c[j]);
            else
                printf(" %d",c[j]);
            flag1++;
        }
        for(j=1; j<a-b+1; j++)
        {
            printf(" %d",c[j]);
        }
    }
    else

        if(b>a)
        {


            for(j=a-b%a+1; j<=a; j++)
            {
                if(flag1==0)
                    printf("%d",c[j]);
                else
                    printf(" %d",c[j]);
                flag1++;
            }
            for(j=1; j<a-b%a+1; j++)
            {
                printf(" %d",c[j]);
            }

        }


    return 0;
}

样例都通过,但提交显示错误0

  • 写回答

1条回答 默认 最新

  • A-Chin 2022-05-02 18:38
    关注

    是不是程序的太复杂了?
    可以试试:
    对于A[i],对应的B的索引为 B[(i + M) % N]

    #include <stdio.h>
    int main(){
        int N, M;
        scanf("%d%d", &N, &M);
        int A[N], B[N];
        int i;
        
        for (i = 0; i < N; ++i){
            scanf("%d", &A[i]); 
        }
        
        for (i = 0; i < N; ++i){
            B[(i + M) % N] = A[i]; 
        }
        
        for (i = 0; i < N - 1; ++i){
            printf("%d\t", B[i]); 
        }
        printf("%d", B[N - 1]); 
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 5月11日
  • 已采纳回答 5月3日
  • 创建了问题 5月2日

悬赏问题

  • ¥15 php 将rtmp协议转hls协议,无法播放
  • ¥15 miniconda安装不了
  • ¥20 python代码编写
  • ¥20 使用MPI广播数据遇到阻塞
  • ¥15 TinyMCE如何去掉自动弹出的“链接…”工具?
  • ¥15 微信支付转账凭证,如何解决
  • ¥15 在win10下使用指纹登录时,界面上的文字最后一个字产生换行现象
  • ¥20 使用AT89C51微控制器和MAX7219驱动器来实现0到99秒的秒表计数,有开始和暂停以及复位功能,下面有仿真图,请根据仿真图来设计c语言程序
  • ¥15 51单片机 双路ad同步采样
  • ¥15 使用xdocreport 生成word