精华内容
下载资源
问答
  • PTA数组循环右移
    2022-04-09 19:49:50

    本题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>0)个整数,将每个整数循环向右移m(≥0)个位置,即将a中的数据由(a0​a1​⋯an−1​)变换为(an−m​⋯an−1​a0​a1​⋯an−m−1​)(最后m个数循环移至最前面的m个位置)。

    函数接口定义:

     
    

    void ArrayShift( int a[], int n, int m );

    其中a[]是用户传入的数组;n是数组的大小;m是右移的位数。函数ArrayShift须将循环右移后的数组仍然存在a[]中。

    裁判测试程序样例:

    #include <stdio.h>
    #define MAXN 10
    
    void ArrayShift( int a[], int n, int m );
    
    int main()
    {
        int a[MAXN], n, m;
        int i;
        
        scanf("%d %d", &n, &m);
        for ( i = 0; i < n; i++ ) scanf("%d", &a[i]);
        
        ArrayShift(a, n, m);
        
        for ( i = 0; i < n; i++ ) {
            if (i != 0) printf(" ");
            printf("%d", a[i]);
        }
        printf("\n");
        
        return 0;
    }
    
    /* 你的代码将被嵌在这里 */

     

    输入样例:

    6 2
    1 2 3 4 5 6
    

    输出样例:

    5 6 1 2 3 4

     答案

    void ArrayShift(int a[], int n, int m)
    {
    	
    	int i,j;
    for(j=1;j<=m;j++)
      {
        int c=a[n-1];
            for(i=n-1;i>0;i--)
            {
                a[i]=a[i-1];
            }
        a[0]=c;
      }
    }

     

    更多相关内容
  • 数据结构之递增列表的插入
  • 数组循环右移

    2022-01-02 20:28:51
    本题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>0)个整数,将每个整数循环向右移m(≥0)个位置,即将a中的数据由(a0​a1​⋯an−1​)变换为(an−m​⋯an−1​a0​a1​⋯an−m−1​)...

    本题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>0)个整数,将每个整数循环向右移m(≥0)个位置,即将a中的数据由(a0​a1​⋯an−1​)变换为(an−m​⋯an−1​a0​a1​⋯an−m−1​)(最后m个数循环移至最前面的m个位置)。

    函数接口定义:

    void ArrayShift( int a[], int n, int m );

    其中a[]是用户传入的数组;n是数组的大小;m是右移的位数。函数ArrayShift须将循环右移后的数组仍然存在a[]中。

    裁判测试程序样例:

    #include <stdio.h>
    #define MAXN 10
    
    void ArrayShift( int a[], int n, int m );
    
    int main()
    {
        int a[MAXN], n, m;
        int i;
    
        scanf("%d %d", &n, &m);
        for ( i = 0; i < n; i++ ) scanf("%d", &a[i]);
    
        ArrayShift(a, n, m);
    
        for ( i = 0; i < n; i++ ) {
            if (i != 0) printf(" ");
            printf("%d", a[i]);
        }
        printf("\n");
    
        return 0;
    }
    
    /* 你的代码将被嵌在这里 */

    输入样例:

    6 2
    1 2 3 4 5 6

    结尾无空行

    输出样例:

    5 6 1 2 3 4

    结尾无空行

    void ArrayShift( int a[], int n, int m ){
        if(m>n)m=m%n;
        int b[m+1];
        int i,j;
        for(i=0;i<m;i++){
            b[i]=a[n-i-1];
        }
        for(i=n-m-1;i>=0;i--){
            a[i+m]=a[i];
        }
        for(m,i=0;m>0;m--,i++){
            a[m-1]=b[i];
        }
    }

     

    展开全文
  • 今天小编就为大家分享一篇解决C语言数组元素循环右移的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 题目: 本题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>0)个整数,将每个整数循环向右移m(≥0)个位置。#include #define MAXN 10int ArrayShift( int a[], int n, int m );int main(){int a...

    题目: 本题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>0)个整数,将每个整数循环向右移m(≥0)个位置。

    #include

    #define MAXN 10

    int ArrayShift( int a[], int n, int m );

    int main()

    {

    int a[MAXN], n, m;

    int i;

    scanf("%d %d", &n, &m);

    for ( i = 0; i < n; i++ ) scanf("%d", &a[i]);

    ArrayShift(a, n, m);

    for ( i = 0; i < n; i++ ) {

    if (i != 0) printf(" ");

    printf("%d", a[i]);

    }

    printf("\n");

    return 0;

    }

    /* 你的代码将被嵌在这里 */

    解法一(自己的笨办法)

    int ArrayShift(a,n,m)

    {

    m=m%n;

    int b = n-m;

    for(i=0;i

    {

    if(i+b

    {

    printf("%d",a[i+b]);

    } else

    {

    printf("%d", a[i-m]);

    }

    if(i!=n-1)

    {

    putchar(' ');

    }

    }

    }

    解法二:(网上的办法)

    数组 1 2 3 4 5 6 循环右移2位 将变成 5 6 1 2 3 4

    a. 先将数组逆序变成 6 5 4 3 2 1,再将前两个逆序 5 6 | 4 3 2 1,最后将后四位数逆序 5 6 1 2 3 4 b. 观察可知1 2 3 4 和 5 6 的顺序在移位前后没有改变,只是位置交换了一下,所以等同于1 2 3 4 5 6 先划分为两部分1 2 3 4 | 5 6,然后将1 2 3 4逆序,再将5 6 逆序 得到 4 3 2 1 6 5,最后整体逆序 得到 5 6 1 2 3 4

    //a:

    void reverse(int *a,int s,int e)

    {

    int i,t;

    for(i=s;i<=(e+s)/2;i++)

    {

    t = a[i];

    a[i]=a[e+s-i];

    a[e+s-i]=t;

    }

    }

    int ArrayShift(int a[],int n,int m)

    {

    m = m%n;

    reverse(a,0,n-1); //全部逆序

    reverse(a,0,m-1); //逆序前m个

    reverse(a,m,n-1); //逆序后面的

    return 0;

    }

    交换两个数还可以用:

    void swap(char& a,char& b)

    {

    a = a^b;

    b = a^b;

    a = a^b;

    }

    展开全文
  • 二、见例题(PTA-数组循环右移) 本题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>0)个整数,将每个整数循环向右移m(≥0)个位置,即将a中的数据由(a0​a1​⋯an−1​)变换为(an−m​⋯an...

    一、两种思路:

    1、每次右移1位,通过循环m次实现m次的右移;

    2、通过新定义一个长度相等的数组b[n],利用相关范围内的两次循环(分为需要右移的n-m位数和向左的m位数)将相应位置的数赋值给b[n],最终返回的b[n]就是右移后的数组。

    二、见例题(PTA-数组循环右移)

    本题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>0)个整数,将每个整数循环向右移m(≥0)个位置,即将a中的数据由(a0​a1​⋯an−1​)变换为(an−m​⋯an−1​a0​a1​⋯an−m−1​)(最后m个数循环移至最前面的m个位置)。

    函数接口定义:

    void ArrayShift( int a[], int n, int m );

    其中a[]是用户传入的数组;n是数组的大小;m是右移的位数。函数ArrayShift须将循环右移后的数组仍然存在a[]中。

    裁判测试程序样例:

    #include <stdio.h>
    #define MAXN 10
    
    void ArrayShift( int a[], int n, int m );
    
    int main()
    {
        int a[MAXN], n, m;
        int i;
        
        scanf("%d %d", &n, &m);
        for ( i = 0; i < n; i++ ) scanf("%d", &a[i]);
        
        ArrayShift(a, n, m);
        
        for ( i = 0; i < n; i++ ) {
            if (i != 0) printf(" ");
            printf("%d", a[i]);
        }
        printf("\n");
        
        return 0;
    }
    
    /* 你的代码将被嵌在这里 */
    输入样例:
    6 2
    1 2 3 4 5 6
    输出样例:
    5 6 1 2 3 4

    题解一:

    void ArrayShift( int a[], int n, int m )
    {
    	int i,j,temp;
        for(i=0;i<m;i++)
        {
            temp=a[n-1];//从最后一位开始移,用temp暂存.注意最后一位的下标是n-1.
            for(j=n-2;j>=0;j--)//这里的n-2不是因为m=2.将第n-2位(倒数第二位)的数值赋值给a[n-1].
            {
                a[j+1]=a[j];//进行j--,实现整体右移一位.
            }
            a[0]=temp;最后把暂存的temp(最开始的最后一位)赋值给a[0],实现一位数的右移.
        }//一共循环m次,实现m位的右移.
    }
    

    题解二:

    void ArrayShift( int a[], int n, int m )
    {
    	m%=n;//(存疑)如果m>n,需对m取余后再赋值给m。否则n-m<0.
    	int b[n];//利用b[n]记录移后每位的数值.
    	for(int i=0,j=n-m;i<m,j<n;i++,j++)//b[i]从首位开始,a[j]从数组末尾需要左移的m个数中的第一个开始,下标为n-m。注意i、j的范围.
    	{
    		b[i]=a[j];
    	}
    	for(int i=m,j=0;i<n,j<n-m;i++,j++)//b[i]从需要右移的第m+1位开始(下标为m),a[j]从首位开始移动.注意i、j的范围.
    	{
    		b[i]=a[j];
    	}
    	for(int i=0;i<n;i++)
    	{
    		a[i]=b[i];//最后重新将b[n]的每一位赋值给a[n],方便主函数的调用.
    	}
        //不可直接return b[n];
    }

    (最后放上纯净版答案代码。已测试,均可满分通过)

    void ArrayShift( int a[], int n, int m )
    {
    	int i,j,temp;
        for(i=0;i<m;i++)
        {
            temp=a[n-1];
            for(j=n-2;j>=0;j--)
            {
                a[j+1]=a[j];
            }
            a[0]=temp;
        }
    }
    void ArrayShift( int a[], int n, int m )
    {
    	m%=n;
    	int b[n];
    	for(int i=0,j=n-m;i<m,j<n;i++,j++)
    	{
    		b[i]=a[j];
    	}
    	for(int i=m,j=0;i<n,j<n-m;i++,j++)
    	{
    		b[i]=a[j];
    	}
    	for(int i=0;i<n;i++)
    	{
    		a[i]=b[i];
    	}
    }
    

    展开全文
  • 设计一个函数,该函数用于实现一维数组循环右移。 函数原型为:voidarrayShiftRight(int a[ ],int n,int m); 该函数的功能是将长度为n的数组a循环右移m个位置。 请使用下面的源代码来测试你设计的函数: ...
  • 本题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>0)个整数,将每个整数循环向右移m(≥0)个位置,即将a中的数据由(a0​a1​⋯an−1​)变换为(an−m​⋯an−1​a0​a1​⋯an−m−1​)...
  • 如何把一个数组循环右移K位如:12345678 右移2位 78123456思路如下:1:首先逆序123456,那么数组变为654321782:再逆序78,那么数组变为654321873:最后逆序整个数组:65432187 ,那么数组变为78123456那么如何逆序...
  • 6-5 数组循环右移

    2021-11-25 16:13:55
    本题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>0)个整数,将每个整数循环向右移m(≥0)个位置,即将a中的数据由(a0​a1​⋯an−1​)变换为(an−m​⋯an−1​a0​a1​⋯an−m−1​)...
  • 本题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>0)个整数,将每个整数循环向右移m(≥0)个位置,即将a中的数据由(a0​a1​⋯an−1​)变换为(an−m​⋯an−1​a0​a1​⋯an−m−1​)...
  • 在这里插入代码片 ```#include <stdio.h> #define MAXN 10 int ... while(m>0){//控制右移的位次// t=a[n-1];//将最后一个数组存起来// for(i=n-2;i>=0;i--){ a[i+1]=a[i]; } a[0]=t; m--; } }
  • 本题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>0)个整数,将每个整数循环向右移m(≥0)个位置,即将a中的数据由(a0​a1​⋯an−1​)变换为(an−m​⋯an−1​a0​a1​⋯an−m−1​)...
  • 算法:js数组循环右移问题 题目描述 一个数组A中存有N(N&gt0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A0 A1 ……AN-1 )变换为(AN-M …… AN-1 ...
  • 6-6 数组循环右移 (20 分)

    千次阅读 2021-11-15 17:39:43
    本题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>0)个整数,将每个整数循环向右移m(≥0)个位置,即将a中的数据由(a0​a1​⋯an−1​)变换为(an−m​⋯an−1​a0​a1​⋯an−m−1​)...
  • 本题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>0)个整数,将每个整数循环向右移m(≥0)个位置,即将a中的数据由(​​⋯ ) 变换为(⋯​​ ⋯ ​​)(最后m个数循环移至最前面的m个位置...
  • 数组循环右移(函数)

    千次阅读 2020-12-03 10:34:43
    题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>0)个整数,将每个整数循环向右移m(≥0)个位置。 函数接口定义: int ArrayShift( int a[], int n, int m ); 其中a[]是用户传入的数组;n是...
  • 普通解法: 可以每次将数组中的元素右移一位,循环K次。每个元素右移N位后都会...高级解法(线性时间):假设原数组序列为abcd1234,要求变换成的数组序列为1234abcd,即循环右移了4位。比较之后,不难看出,其中有...
  • Java 数组循环右移k位

    2020-05-21 17:42:31
    【思路一】最基本解法:内层循环,循环右移1位,外层循环执行K次。由于前一位覆盖后一位,所以内存循环从后向前移动 ... * 数组循环右移K位 */ public class movek { //最基本解法:内层循环,循环右.
  • 数组循环右移C#

    千次阅读 2019-06-11 10:59:18
    题目大意是:指定数组右移,只能在数组内,不能用另外的数组。最少移动次数,如何设计。...数组个数为奇数时,中间的不用动,所以循环的次数就是(数组个数/2)的整数位 代码如下 /// <summary> ...
  • 数组循环右移C语言

    2021-12-05 13:55:36
    本题要求实现对数组进行循环右移:一个数组a中存有n(>0,不超过10)个整数,将每个整数循环向右移m(≥0)个位置 输入格式: 第1行输入N(1≤N≤100)和M(≥0);第2行输入N个整数,之间用空格分隔。 输出格式: ...
  • 问题:已知一个长度为n的数组和一个正整数k,并且最多只能使用一个用于交换数组元素的附加空间单位,试设计算法得到原数组循环右移k次的结果 基本思路:一个萝卜一个坑代码实现 #include<iostream> int ...
  • 【C语言】数组循环右移

    千次阅读 2020-07-31 08:33:21
    本题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>0)个整数,将每个整数循环向右移m(≥0)个位置,即将a中的数据由 (a0,a1,...,an−1)(a_0,a_1,...,a_{n-1})(a0​,a1​,...,an−1​) 变为 ...
  • 本题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>0)个整数,将每个整数循环向右移m(≥0)个位置。 函数接口定义: int ArrayShift( int a[], int n, int m ); 其中a[]是用户传入的数组;n...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 42,441
精华内容 16,976
关键字:

数组循环右移

友情链接: 51专题.zip