我是靠谱客的博主 清爽奇迹,最近开发中收集的这篇文章主要介绍c++之数组值左移右移升级版,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

分析

首先,这个是前面那个代码的升级版,我们暂时先不考虑时间复杂度的问题。先说说之前代码的缺陷。

第一个:之前没有考虑到如果移动的位数大于数组长度,那我们就相当于做了一个重复的事情,比如说移动十二位 ,我们数组长度有十位,那么 ,移动十位后就和原来的数组一模一样。

所以 ,我们应该提出一个解决方法。
第二个:我们没有考虑到负数的情况 ,万一用户输入了负数,那么我们就可以把它处理为右移。

设计

运用一个取模运算,这样就可以解决我们所提出来的第一个问题。
第二个怎么解决呢? 其实也很简单,我们可以用if语句判断一下 ,如果小于0,那么我们就取它的相反数,再调用右移函数。、

代码实现

#include<iostream>
using namespace std;
//函数声明
void Left_Move(int *a, int len);
void Right_Move(int *a, int len);
void PrintArray(int *a, int len);
void Left_Move_n(int *a, int len, int n);
void Right_Move_n(int *a, int len, int n);
void Cir(int n, int len, int *a);

int main(){
	int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	int len = sizeof(a) / sizeof(a[0]);
	int n=0;
	Cir(n, len, a);
	system("pause");
	return 0;
}

//左移一位函数
// 1 2 3 4 5 6 7 8 9 10
//2 3 4 5 6 7 8 9 10 1
void Left_Move(int *a, int len){
	int temp = a[0];
	for (int i = 1; i < len; i++){
		a[i - 1] = a[i];
	}
	a[len - 1] = temp;
	//PrintArray(a, len);
}




//右移一位函数
//1 2 3 4 5 6 7 8 9 10
//10 1 2 3 4 5 6 7 8 9
void Right_Move(int *a, int len){
	int temp = a[len - 1];
	for (int i = len-1; i > 0; i--){
		a[i] = a[i-1];
	}
	a[0] = temp;
	//PrintArray(a, len);
}

//左移n位

void Left_Move_n(int *a, int len,int n){
	 n = n%len;
	for (int i = 0; i < n; i++){
		Left_Move(a, len);
	}
	PrintArray(a, len);
}

//右移n位

void Right_Move_n(int *a, int len, int n){
	n = -n;
	 n = n%len;
	for (int i = 0; i < n; i++){
		Right_Move(a, len);
	}
	PrintArray(a, len);
}

//打印函数
void PrintArray(int *a, int len){
	for (int i = 0; i < len; i++){
		printf("%d ", a[i]);
	}
	printf(" n");
}


//控制循环
void Cir(int n,int len,int *a){
	while (true){
		cout << "请输入移几位,正数左移,负数右移" << 'n';
		cin >> n;
		if (n > 0){
			Left_Move_n(a, len, n);
		}
		else{
			Right_Move_n(a, len, n);
		}
		char num;
		cout << "是否继续y/n"<<'n';
		num = getchar();
		cin >> num;
		if ('n' == num){
			break;
		}
	}
}

仔细研究我的代码,细心的人会发现,我其实玩了小聪明,我把负数直接定义为右移,正数直接是左移。但是,我们说的是如果按照正常情况的话,用户输入正确的情况下,用户想要调用左移就调用左移,想要调用右移就是右移,万一出现用户输入为负数,那么我们就把它当做右移情况完成。所以,这个代码还需改进!它并不是一个完美的版本。

最后

以上就是清爽奇迹为你收集整理的c++之数组值左移右移升级版的全部内容,希望文章能够帮你解决c++之数组值左移右移升级版所遇到的程序开发问题。

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

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

评论列表共有 0 条评论

立即
投稿
返回
顶部