xcode-C语言出接触_约瑟夫环_循环链表
2014-10-20 18:56
323 查看
要求..
约瑟夫环问题的具体描述是:设有编号为1,2,......,n的
n(n>0)个人围成一个圈,从第一个人开始报数,报到m
时停止报数,报m
的人出圈,再从他的下一个人起重新报数,报到m
时停止报数,报m
的出圈,......,如此下去,知道只剩下一人为止。当任意给定n
和m
后,设计算法求n
个人出圈的次序。
#import <Foundation/Foundation.h>
struct node{
int data;
struct node * next;
};
struct node *head = NULL,*new,*end,*p;// new 为新建节点, end为尾节点,head 为头结点
int main(int argc, const char * argv[]) {
int n = 0;
int m = 0;
printf("请输入n的值:\n");
scanf("%d",&n);
printf("请输入m的值:\n");
scanf("%d",&m);
for(int i = 1; i < n+1; i++){
new = (struct node *)malloc(sizeof(struct node));
new->data=i;
new -> next = NULL;
if (i == 1) {
head = new;
end = new;
}else{
end->next = new;
end = new;
}
}
end->next=head;
//定义 p 为一直寻找m个数据后的指针,开始的时候,为头指针
p = head;
int num=1;//表示是否为第一次剔除人, 如果num为1 则第一次剔出人,如果等于2 则不是第一次剔出人
int x =1; //记录第几次 被剔除, 没有什么实际意义
while (n > 1) {
if(num == 1){
for (int i = 1; i< m-1; i++) {
p = p->next;
}
num= 2;
}else{
for (int i = 0; i< m-1; i++) {
p = p->next;
}
}
printf("%d %d\n",p->next->data,x);
p->next = p->next->next;
x++;
n--;
}
printf("最后输出的是:%d\n",p->next->data);
return 0;
}
约瑟夫环问题的具体描述是:设有编号为1,2,......,n的
n(n>0)个人围成一个圈,从第一个人开始报数,报到m
时停止报数,报m
的人出圈,再从他的下一个人起重新报数,报到m
时停止报数,报m
的出圈,......,如此下去,知道只剩下一人为止。当任意给定n
和m
后,设计算法求n
个人出圈的次序。
#import <Foundation/Foundation.h>
struct node{
int data;
struct node * next;
};
struct node *head = NULL,*new,*end,*p;// new 为新建节点, end为尾节点,head 为头结点
int main(int argc, const char * argv[]) {
int n = 0;
int m = 0;
printf("请输入n的值:\n");
scanf("%d",&n);
printf("请输入m的值:\n");
scanf("%d",&m);
for(int i = 1; i < n+1; i++){
new = (struct node *)malloc(sizeof(struct node));
new->data=i;
new -> next = NULL;
if (i == 1) {
head = new;
end = new;
}else{
end->next = new;
end = new;
}
}
end->next=head;
//定义 p 为一直寻找m个数据后的指针,开始的时候,为头指针
p = head;
int num=1;//表示是否为第一次剔除人, 如果num为1 则第一次剔出人,如果等于2 则不是第一次剔出人
int x =1; //记录第几次 被剔除, 没有什么实际意义
while (n > 1) {
if(num == 1){
for (int i = 1; i< m-1; i++) {
p = p->next;
}
num= 2;
}else{
for (int i = 0; i< m-1; i++) {
p = p->next;
}
}
printf("%d %d\n",p->next->data,x);
p->next = p->next->next;
x++;
n--;
}
printf("最后输出的是:%d\n",p->next->data);
return 0;
}
相关文章推荐
- 数据结构7: 循环链表(约瑟夫环)的建立及C语言实现
- Xcode-c语言初接触-冒泡直接插入排序
- C语言循环链表求解约瑟夫环问题(循环方式)
- Xcode-c语言初接触-辗转相除法(递归)
- xcode-C语言出接触_选择排序
- Xcode-C语言出接触_关于求最大值最小值的位置问题
- Xcode-c语言初接触-分支结构
- xcode-C语言出接触_基本概念
- 循环链表(约瑟夫环)的建立及C语言实现
- C语言基于循环链表解决约瑟夫环问题的方法示例
- 约瑟夫环问题(循环链表)
- 约瑟夫环,杀人游戏(静态循环链表实现)
- 【数据结构】C语言实现双向链表(带头尾指针,非循环链表)
- 约瑟夫环(求助C语言高手)
- 约瑟夫环(循环链表)
- 约瑟夫环(N个人围桌,C语言,数据结构) 链表解法
- C语言实现约瑟夫环
- 「算法精解_C语言描述」链表_循环链表的实现与分析
- Linux下的C语言编程——双向循环链表的简单实现