约瑟夫问题 循环链表实现和数字处理实现
来源:互联网 发布:nodejs 定义二维数组 编辑:程序博客网 时间:2024/05/22 14:04
#include<iostream>
#include<cstring> //指针初始化都是 NULL
using namespace std;
typedef struct person
{
int data;
person *next;
}person;
person * create( int n ) //构建循环链表
{
person *temp =NULL; //建一个指针
if(0!=n) //如果不是空的
{
int j = 1;
person * p_perso = NULL;
p_perso = new person[n]; //新开个结构指针
if(NULL == p_perso)
{
return NULL;
}
else
{
memset(p_perso,0,sizeof(p_perso));
}
temp = p_perso;
while(j < n) //数组的初始化
{
p_perso -> data = j;
p_perso -> next = p_perso + 1; //既然是数组,则每一个数组需要变成下一个
p_perso = p_perso -> next;//加 1 就是指针的地址指向数组的下一个。
j++;
}
p_perso -> data = n;
p_perso -> next = temp;
}
return temp;
}
int main()
{
person *p = NULL;
person *r = NULL;
int all,first,loop;
cin >> all >> first >>loop;
p = create(all); //传入指针(循环链表的指针)
r = p;
for(int i = 0; i < first - 1;i++)
{
r = r->next;
}
while(r->data != r->next->data)
{
int i = 1;
for(;i < loop-1 ; i ++)
{
r = r -> next;
}
cout << r -> next -> data <<" ";
r -> next = r -> next -> next; //原来的指向指向下一个 (删除操作)
r = r->next ; //和删除无关,只是让指向下一个然后继续走。
}
cout << r-> data << endl;
delete [] p;
// delete [] r;
return 0;
}
/*
#include<iostream>
using namespace std;
int main(){
int N,M;
cin>>N>>M;
int* a=new int[N];
for(int i=0;i<N;i++){
a[i]=i+1;
}
int countN=0;
int countM=0;
for(int i=0;;i++){
if(a[i%N]!=-1){
countM++;
}
if(countM==M){
cout<<a[i%N]<<" ";
a[i%N]=-1;
countN++;
countM=0;
}
if(countN==N){
break;
}
}
delete a;
return 0;
}
*/
//第二种方法:数字处理,和灭灯问题一样。然其它关了的变成-1,不是的话就+1 ;加到要求值输出
//真傻瓜,就用了取%的操作,就每次可以自觉返回初始。
#include<cstring> //指针初始化都是 NULL
using namespace std;
typedef struct person
{
int data;
person *next;
}person;
person * create( int n ) //构建循环链表
{
person *temp =NULL; //建一个指针
if(0!=n) //如果不是空的
{
int j = 1;
person * p_perso = NULL;
p_perso = new person[n]; //新开个结构指针
if(NULL == p_perso)
{
return NULL;
}
else
{
memset(p_perso,0,sizeof(p_perso));
}
temp = p_perso;
while(j < n) //数组的初始化
{
p_perso -> data = j;
p_perso -> next = p_perso + 1; //既然是数组,则每一个数组需要变成下一个
p_perso = p_perso -> next;//加 1 就是指针的地址指向数组的下一个。
j++;
}
p_perso -> data = n;
p_perso -> next = temp;
}
return temp;
}
int main()
{
person *p = NULL;
person *r = NULL;
int all,first,loop;
cin >> all >> first >>loop;
p = create(all); //传入指针(循环链表的指针)
r = p;
for(int i = 0; i < first - 1;i++)
{
r = r->next;
}
while(r->data != r->next->data)
{
int i = 1;
for(;i < loop-1 ; i ++)
{
r = r -> next;
}
cout << r -> next -> data <<" ";
r -> next = r -> next -> next; //原来的指向指向下一个 (删除操作)
r = r->next ; //和删除无关,只是让指向下一个然后继续走。
}
cout << r-> data << endl;
delete [] p;
// delete [] r;
return 0;
}
/*
#include<iostream>
using namespace std;
int main(){
int N,M;
cin>>N>>M;
int* a=new int[N];
for(int i=0;i<N;i++){
a[i]=i+1;
}
int countN=0;
int countM=0;
for(int i=0;;i++){
if(a[i%N]!=-1){
countM++;
}
if(countM==M){
cout<<a[i%N]<<" ";
a[i%N]=-1;
countN++;
countM=0;
}
if(countN==N){
break;
}
}
delete a;
return 0;
}
*/
//第二种方法:数字处理,和灭灯问题一样。然其它关了的变成-1,不是的话就+1 ;加到要求值输出
//真傻瓜,就用了取%的操作,就每次可以自觉返回初始。
0 0
- 约瑟夫问题 循环链表实现和数字处理实现
- 单向循环链表实现约瑟夫问题
- 用循环链表实现约瑟夫问题
- 约瑟夫问题简单实现-循环链表
- C++循环链表实现约瑟夫问题
- 约瑟夫问题--循环链表实现
- 循环链表 约瑟夫环问题实现
- 约瑟夫环问题循环链表实现
- 约瑟夫问题循环链表实现
- 约瑟夫问题(循环链表实现)
- 循环链表实现约瑟夫问题
- 约瑟夫问题循环链表实现
- 循环链表实现约瑟夫问题
- 循环链表实现约瑟夫问题
- 循环链表实现约瑟夫问题
- 循环链表实现约瑟夫问题
- 循环链表实现约瑟夫问题,拉丁方阵问题
- 利用循环链表实现约瑟夫问题的求解
- 黑马程序员 —— JavaAPI_集合框架 (第十六天)
- div和iframe之间空隙太大的问题,终于解决了
- 启用“锁定内存页”选项 (Windows)
- HDU 1045 Fire Net
- 上传图片的验证 验证是否为图片 后缀名验证 (总结)
- 约瑟夫问题 循环链表实现和数字处理实现
- shareplex以前运行正常,用户被锁导致重启后数据不能同步
- SQL Syntax - Some Useful Keywords
- tplink无线路由wds问题
- Python中global用法详解
- PKU 3249 Test for Job
- 如何学习开源项目及Ceph的浅析
- 一套面试题
- 直接push jar包到system/framework,供APK调用此jar包中的类