⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 f1101.cpp

📁 it is a usefull thing
💻 CPP
字号:
//=====================================
// f1101.cpp
// josephus problem procedural solving
//=====================================
#include<iostream>
using namespace std;
//-------------------------------------
struct Jose{                   // 小孩结点
  int code;                    // 小孩编号
  Jose* next;                  // 指向下一个小孩结点
};//-----------------------------------
int n, s, m;
Jose *pCur, *pivot;
//-------------------------------------
bool getValue();
Jose* createRing();          // 创建环链表
void countBoy(int m);        // 数m个小孩
void process();               // 排除n-1个小孩
//-------------------------------------
int main(){
  if(!getValue()) return 1;
  Jose* pJose = createRing();
  process();
  cout<<"\nThe winner is "<<pCur->code<<"\n";
  delete[] pJose;
}//------------------------------------
bool getValue(){
  cout <<"please input boyNumber, startPosition, intervalNumber:\n";
  cin>>n>>s>>m;
  if(n>=2 && s>=1 && s<=n && m>=1 && m<=n)  return true;
  cerr<<"failed in bad boyNumber or startPosition or intervalNumber.\n";
  return false;
}//------------------------------------
Jose* createRing(){
  Jose* px = new Jose[n];
  for(int i=1; i<=n; ++i){
    px[i-1].next = &px[i%n];
    px[i-1].code = i;
  }//------------------------
  cout<<"There are "<<n<<" boys.\nBoys leaved in order:\n";
  pivot = &px[n-2];
  pCur = &px[n-1];
  countBoy(s-1);
  return px;
}//------------------------------------
void countBoy(int m){
  for(int i=0; i<m; ++i){
    pivot = pCur;
    pCur = pivot->next;
  }
}//------------------------------------
void process(){
  for(int i=1; i<n; ++i){
    countBoy(m);
    static int line=0;
    cout<<"  "<<pCur->code;
    if(!(++line%10)) cout<<"\n";
    pivot->next = pCur->next;       //小孩脱链
    pCur = pivot;
  }
}//====================================

 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -