华为面试题——约瑟夫问题的C++简单实现(循环链表)
2017-04-16 18:25
405 查看
/*
author:jiangxin
Blog:http://blog.csdn.net/jiangxinnju
Function:method of Josephus question
*/
#include <iostream>
using namespace std;
struct node
{
int seq;
node *next;
};
typedef struct node NODE;
void test_Josephus()
{
/*如果共同拥有n人。从第s个人開始数数,每数到m该人出列,后面的人又一次開始数。知道所有人出列*/
int n,s,m;
NODE *head,*last,*current,*prev;
cout << "Input the n,s,m(separate with space):";
cin >> n >> s >> m;
for(int i=1;i<=n;i++) //建立循环链表
{
current = new NODE;
current->seq = i;
current->next = head;
if(i == 1)
{
head = current;
last = current;
}
else
{
last->next = current;
last = last->next;
}
}
current = head; //遍历循环链表,输出序列
do
{
cout << current->seq << " ";
current = current->next;
}while(current!=head);
current = head; //将current置于第s个位置
for(int i=1;i<s;i++)
{
current = current->next;
}
cout << endl;
for(int i=1;i<=n;i++) //共循环n轮,得到一个总体的输出序列
{
for(int j=1;j<m;j++)
{
prev = current;
current = current->next;
}
cout << current->seq << " ";
prev->next = current->next;
delete current;
current = prev->next;
}
}
author:jiangxin
Blog:http://blog.csdn.net/jiangxinnju
Function:method of Josephus question
*/
#include <iostream>
using namespace std;
struct node
{
int seq;
node *next;
};
typedef struct node NODE;
void test_Josephus()
{
/*如果共同拥有n人。从第s个人開始数数,每数到m该人出列,后面的人又一次開始数。知道所有人出列*/
int n,s,m;
NODE *head,*last,*current,*prev;
cout << "Input the n,s,m(separate with space):";
cin >> n >> s >> m;
for(int i=1;i<=n;i++) //建立循环链表
{
current = new NODE;
current->seq = i;
current->next = head;
if(i == 1)
{
head = current;
last = current;
}
else
{
last->next = current;
last = last->next;
}
}
current = head; //遍历循环链表,输出序列
do
{
cout << current->seq << " ";
current = current->next;
}while(current!=head);
current = head; //将current置于第s个位置
for(int i=1;i<s;i++)
{
current = current->next;
}
cout << endl;
for(int i=1;i<=n;i++) //共循环n轮,得到一个总体的输出序列
{
for(int j=1;j<m;j++)
{
prev = current;
current = current->next;
}
cout << current->seq << " ";
prev->next = current->next;
delete current;
current = prev->next;
}
}
相关文章推荐
- 华为面试题——约瑟夫问题的C++简单实现(循环链表)
- 华为面试题——约瑟夫问题的C++简单实现(循环链表)
- 华为一道面试题,不能用系统的字符串函数求对等数,用最简单的方法实现。
- 华为经典面试题---大数乘法的c++实现
- 用C++实现简单的文件I/O操作
- 标准纯C++实现简单的词法分析器(一)
- 华为C/C++笔试题(附答案,华为面试题系列)
- 用C++实现简单的文件I/O操作(ifstream,ofstream)
- 华为C/C++笔试题(附答案,华为面试题系列)
- 一个简单的多叉树C++实现
- 用C++实现简单的文件I/O操作
- 初学者看过来:简单谈谈 C/C++ 递归的思想,实现,以及和循环的关系。
- Ping的简单实现 CODE: C /C++
- 标准纯C++实现简单的词法分析器(二)
- 标准纯C++实现简单的词法分析器(二)
- 华为C/C++笔试题(附答案,华为面试题系列)
- dotNet中ArrayList的C++模板简单实现
- 标准纯C++实现简单的词法分析器(三)
- C++中简单实现foreach循环
- 单链表赋值,定位,添加,(C++ ) 简单实现 未整理