贝格尔编排法之C++版
2015-09-04 18:16
399 查看
轮转的步骤与之前的java代码不同,相对之前的更高效一些。
// #include <iostream> #include<vector> using namespace std; void display(vector<int> arrays,int len){ for(int i = 0;i<len/2;i++) cout<<arrays[i]<<"....."<<arrays[len-i-1]<<endl; } int reset(vector<int> &arrays,int flag,int len){ if(flag==0) flag = len -1; else flag = 0; int temp = arrays[len -1]; arrays[len-1] = arrays[0]; arrays[0] = temp; return flag; } void moveByWalk(vector<int> &arrays,int walk,int flag,int len){ int begin = len-flag-1;//begin为首次移动的位置,即flag对应的另外一个位置; int index = begin; int temp=0,lasttemp = arrays[index]; int mod = len-1;//空白位置不计入 for(int i=0;i<len-2;i++){ int nextpos = (index+walk)%mod; temp = arrays[nextpos]; arrays[nextpos]= lasttemp; index = nextpos; lasttemp = temp; } //当flag=0时,最后一次赋值会赋给arrays[0],因为对len-1取余的原因,所以要单独赋值 arrays[begin] = lasttemp; } void compete(vector<int> arrays){ int len = arrays.size(); if(len &0x1 != 0){ arrays.push_back(0); len++; } int flag =len-1; int walk = len/2 -1; int max = len-1; for(int i =0;i <max;i++){ if(i>0){ flag = reset(arrays,flag,len); moveByWalk(arrays,walk,flag,len); } cout<<"第"<<i+1<<"轮:"<<endl; display(arrays,len); } } int main () { int num = 7; vector<int> arrays; for(int i=0;i<num;i++){ arrays.push_back(i+1); } compete(arrays); }
相关文章推荐
- C++输入输出知识
- 为什么C++ 不叫++C?
- C++入门经典 笔记 (第十三章)高级引用和指针
- C语言实现栈操作
- 华为OJ题库-C++实现蛇形矩阵
- [JNI] Java 调用 C++ dll
- JNI开发之 c++输出日志到Logcat
- c++虚函数机制
- C++基础---函数指针
- python类变量与 C++的静态变量并不等效
- C++基础---有返回值类型函数(指针函数)
- 继承关系中的虚函数表
- C++基础---有返回值类型函数(返回引用类型)
- C++中的虚函数详解
- C++标准库异常类
- C++基础---有返回值类型函数(返回非引用类型)
- stl内存池学习
- extern "C"的用法解析
- C++堆栈的比较
- C++基础---无返回值函数(void函数)