我是靠谱客的博主 开放夕阳,最近开发中收集的这篇文章主要介绍1008 数组元素循环右移问题(分数20)【C语言】&【C++】,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在这里插入图片描述

输入格式:

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

输出格式:

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

输入样例:

6 2
1 2 3 4 5 6

输出样例:

5 6 1 2 3 4

代码一:

这个思路就是一个一个得右移,真的移了m次,当然这是完全符合题意的,就是还要两重循环,效率确实有点低。但AC没问题。

#include<stdio.h> //C语言版本

int main(){
	int A[105];
	int N,M;
	if(scanf("%d%d",&N,&M)){
		if(N<1||N>100){
			printf("N error!n");
			return 0;
		}
		if(M<0){
			printf("M error!n");
			return 0;
		}
		int i,temp,j;;
		for(i=0;i<N;i++){
			if(scanf("%d",&A[i]));
		}
		for(j=0;j<M;j++){
			temp=A[N-1];
			for(i=N-1;i>=0;i--){
				A[i]=A[i-1];
			}
			A[0]=temp;
		}
		for(i=0;i<N;i++){
			printf("%d",A[i]);
			if(i<N-1) printf(" ");
		}
			
	}
    return 0;
}

代码二:

思路:现在是22年11月,又二刷了该题,觉得要优化下,换了思路。既然要循环右移m个数,a[0]变成了a[m]。那输入的时候,i直接从m开始呗。有一点需要注意一下,m是可以大于等于n的,需要m=m%n来确定真正右移的位数。

#include<cstdio> // c++版本

int main(){
	int n,m;
	if(scanf("%d%d",&n,&m));
	if(m>=n)  m=m%n;
	
	int a[n];
	int i;
	for(i=m;i<n;i++)	
		if(scanf("%d",&a[i]));
	
	for(i=0;i<m;i++)
		if(scanf("%d",&a[i]));
			
	for(i=0;i<n;i++){
		printf("%d",a[i]);
		if(i!=n-1) printf(" ");
	}
	printf("n");
	return 0;
}

最后

以上就是开放夕阳为你收集整理的1008 数组元素循环右移问题(分数20)【C语言】&【C++】的全部内容,希望文章能够帮你解决1008 数组元素循环右移问题(分数20)【C语言】&【C++】所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部