-
2022-04-09 19:49:50
本题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>0)个整数,将每个整数循环向右移m(≥0)个位置,即将a中的数据由(a0a1⋯an−1)变换为(an−m⋯an−1a0a1⋯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; } }
更多相关内容 -
数据结构之数组循环右移
2016-05-28 10:30:51数据结构之递增列表的插入 -
数组循环右移
2022-01-02 20:28:51本题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>0)个整数,将每个整数循环向右移m(≥0)个位置,即将a中的数据由(a0a1⋯an−1)变换为(an−m⋯an−1a0a1⋯an−m−1)...本题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>0)个整数,将每个整数循环向右移m(≥0)个位置,即将a中的数据由(a0a1⋯an−1)变换为(an−m⋯an−1a0a1⋯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语言数组元素循环右移的问题
2020-08-27 04:23:04今天小编就为大家分享一篇解决C语言数组元素循环右移的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 -
数组循环右移 C语言实现
2021-05-23 00:51:45题目: 本题要求实现一个对数组进行循环右移的简单函数:一个数组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;
}
-
实现数组循环右移的两种简单的思路(C/C++)(文末含PTA-数组循环右移题解)
2022-01-21 22:17:24二、见例题(PTA-数组循环右移) 本题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>0)个整数,将每个整数循环向右移m(≥0)个位置,即将a中的数据由(a0a1⋯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中的数据由(a0a1⋯an−1)变换为(an−m⋯an−1a0a1⋯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]; } }
-
用函数实现数组循环右移
2021-12-13 18:13:54设计一个函数,该函数用于实现一维数组的循环右移。 函数原型为:voidarrayShiftRight(int a[ ],int n,int m); 该函数的功能是将长度为n的数组a循环右移m个位置。 请使用下面的源代码来测试你设计的函数: ... -
6-7 数组循环右移 (20 分)
2022-03-20 11:57:04本题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>0)个整数,将每个整数循环向右移m(≥0)个位置,即将a中的数据由(a0a1⋯an−1)变换为(an−m⋯an−1a0a1⋯an−m−1)... -
java 一个数组循环右移K位
2021-02-26 15:56:25如何把一个数组循环右移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中的数据由(a0a1⋯an−1)变换为(an−m⋯an−1a0a1⋯an−m−1)... -
6-2 数组循环右移 (20 分)
2022-02-03 09:43:11本题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>0)个整数,将每个整数循环向右移m(≥0)个位置,即将a中的数据由(a0a1⋯an−1)变换为(an−m⋯an−1a0a1⋯an−m−1)... -
一维数组 数组循环右移
2020-11-30 22:36:44在这里插入代码片 ```#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--; } } -
6-9 数组循环右移 (20 分)
2021-12-05 16:58:49本题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>0)个整数,将每个整数循环向右移m(≥0)个位置,即将a中的数据由(a0a1⋯an−1)变换为(an−m⋯an−1a0a1⋯an−m−1)... -
算法:js数组循环右移问题
2021-02-02 02:05:49算法:js数组循环右移问题 题目描述 一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移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中的数据由(a0a1⋯an−1)变换为(an−m⋯an−1a0a1⋯an−m−1)... -
PTA6-26-一维数组 数组循环右移 (20 分)
2021-02-09 12:28:54本题要求实现一个对数组进行循环右移的简单函数:一个数组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是... -
把一个含有N个元素的数组循环右移K位
2021-05-22 15:31:28普通解法: 可以每次将数组中的元素右移一位,循环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个整数,之间用空格分隔。 输出格式: ... -
C++/C数组循环右移空间复杂度O(n)实现
2021-10-31 21:21:17问题:已知一个长度为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) 变为 ... -
实验8.1 指针与数组 6-6 数组循环右移
2020-12-06 21:00:06本题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>0)个整数,将每个整数循环向右移m(≥0)个位置。 函数接口定义: int ArrayShift( int a[], int n, int m ); 其中a[]是用户传入的数组;n...