概述
分析
首先,这个是前面那个代码的升级版,我们暂时先不考虑时间复杂度的问题。先说说之前代码的缺陷。
第一个:之前没有考虑到如果移动的位数大于数组长度,那我们就相当于做了一个重复的事情,比如说移动十二位 ,我们数组长度有十位,那么 ,移动十位后就和原来的数组一模一样。
所以 ,我们应该提出一个解决方法。
第二个:我们没有考虑到负数的情况 ,万一用户输入了负数,那么我们就可以把它处理为右移。
设计
运用一个取模运算,这样就可以解决我们所提出来的第一个问题。
第二个怎么解决呢? 其实也很简单,我们可以用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++之数组值左移右移升级版所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复