现要求按出圈次序, 每10人一组, 给出这n个人的顺序表
9 个解决方案
#1
http://www.156ok.com/bbs/problem_list.asp?id=11088
#2
首尾相接的连~~~
#3
约瑟夫环,作业帖……
#4
好象又不是,更简单点儿……
#5
说简单你倒是做啊.不帮忙跑来吹什么.
#6
约瑟夫环的问题,好像钱能的书上有这部分的例子,可以看一下。。。。
#7
《C语言习题集》里有跟这个题目相类似的题目,好象在第5章,自己去看
#8
编号为1,2,。。n的n个人按顺时针方向围坐一圈。每人持有一个密码(正整数)。一开始人选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报道m是停止报数,保m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数。如此下去, 直至所有人全部出列位置,设计一个程序求出出列顺序。
struct lnode {
elemtype data; //值域
lnode* next; //指针域
}c_list;
/*建表*/
void create(c_list *hl);/*按要求读入n个数建表*/
/*显示结点值*/
void display(c_list *hl);
/*从循环链表中删除元素*/
void DeleteList(c_list* HL);
/*上面的我就不做了*/
void JSC(int n,int m)
{
int count=1;
struct *head,*p,*q;
create(head);
p=head;
while(p)
{
q=p->next;
if(count==m)
{
display(p);
delectlist(p);
count=1;
p=q;
}
else
{
count++;
p=p->next;
}
}
}
struct lnode {
elemtype data; //值域
lnode* next; //指针域
}c_list;
/*建表*/
void create(c_list *hl);/*按要求读入n个数建表*/
/*显示结点值*/
void display(c_list *hl);
/*从循环链表中删除元素*/
void DeleteList(c_list* HL);
/*上面的我就不做了*/
void JSC(int n,int m)
{
int count=1;
struct *head,*p,*q;
create(head);
p=head;
while(p)
{
q=p->next;
if(count==m)
{
display(p);
delectlist(p);
count=1;
p=q;
}
else
{
count++;
p=p->next;
}
}
}
#9
/* 约瑟夫环 */
#include <stdlib.h>
#include <stdio.h>
typedef struct ENode
{
int Number;
int Cipher;
struct ENode *next;
}enodetype;
void CreateLink(enodetype *head);
void display(enodetype *head);
void DeleteOrder(enodetype *head, int m, int N);
const int N = 7;
int main(int argc, char* argv[])
{
enodetype *head = NULL;
head = (enodetype *)malloc(sizeof(enodetype));
if( head == NULL )
{
printf("内存分配失败!\n");
return 0;
}
head->Number = head->Cipher =0;
head->next = head;
CreateLink(head);
display(head);
int m=20;
DeleteOrder(head,m,N);
printf("\nHello World\n");
return 0;
}
void CreateLink(enodetype *head)
{
int Cipher[N] = {3,1,7,2,4,8,4};
int i=0;
enodetype *p,*newnode;
p = head;
for( i=1; i<=N; i++)
{
newnode = (enodetype *)malloc(sizeof(enodetype));
if( newnode == NULL )
{
printf("内存分配失败!\n");
return ;
}
newnode->Number = i;
newnode->Cipher = Cipher[i-1];
p->next = newnode;
p = newnode;
}
p->next = head->next;//尾结点的指针指向第一个结点.
}
void display(enodetype *head)
{
int i=0;
enodetype *p = head->next ;
printf("显示各结点的编号和密码!\n");
if( p == NULL )
{
printf("The link is Empty\n");
return;
}
// for( i=0; i<N; i++)
do{
printf("cipher[%d] = %d ",p->Number ,p->Cipher );
p = p->next ;
}while( p != head->next);
printf("\n");
}
void DeleteOrder(enodetype *head, int m,int N)
{
int i,j;
enodetype *p ,*q=head;
for( i=0; i<N; i++)q = q->next ;
for( i=0; i<N; i++)
{
p = q;
for( j=0; j<m; j++)
{
q = p;
p = p->next ;
}
q->next = p->next ;
m = p->Cipher;
printf("(%d,%d)",p->Number,m);
free(p);
}
}
#include <stdlib.h>
#include <stdio.h>
typedef struct ENode
{
int Number;
int Cipher;
struct ENode *next;
}enodetype;
void CreateLink(enodetype *head);
void display(enodetype *head);
void DeleteOrder(enodetype *head, int m, int N);
const int N = 7;
int main(int argc, char* argv[])
{
enodetype *head = NULL;
head = (enodetype *)malloc(sizeof(enodetype));
if( head == NULL )
{
printf("内存分配失败!\n");
return 0;
}
head->Number = head->Cipher =0;
head->next = head;
CreateLink(head);
display(head);
int m=20;
DeleteOrder(head,m,N);
printf("\nHello World\n");
return 0;
}
void CreateLink(enodetype *head)
{
int Cipher[N] = {3,1,7,2,4,8,4};
int i=0;
enodetype *p,*newnode;
p = head;
for( i=1; i<=N; i++)
{
newnode = (enodetype *)malloc(sizeof(enodetype));
if( newnode == NULL )
{
printf("内存分配失败!\n");
return ;
}
newnode->Number = i;
newnode->Cipher = Cipher[i-1];
p->next = newnode;
p = newnode;
}
p->next = head->next;//尾结点的指针指向第一个结点.
}
void display(enodetype *head)
{
int i=0;
enodetype *p = head->next ;
printf("显示各结点的编号和密码!\n");
if( p == NULL )
{
printf("The link is Empty\n");
return;
}
// for( i=0; i<N; i++)
do{
printf("cipher[%d] = %d ",p->Number ,p->Cipher );
p = p->next ;
}while( p != head->next);
printf("\n");
}
void DeleteOrder(enodetype *head, int m,int N)
{
int i,j;
enodetype *p ,*q=head;
for( i=0; i<N; i++)q = q->next ;
for( i=0; i<N; i++)
{
p = q;
for( j=0; j<m; j++)
{
q = p;
p = p->next ;
}
q->next = p->next ;
m = p->Cipher;
printf("(%d,%d)",p->Number,m);
free(p);
}
}
#1
http://www.156ok.com/bbs/problem_list.asp?id=11088
#2
首尾相接的连~~~
#3
约瑟夫环,作业帖……
#4
好象又不是,更简单点儿……
#5
说简单你倒是做啊.不帮忙跑来吹什么.
#6
约瑟夫环的问题,好像钱能的书上有这部分的例子,可以看一下。。。。
#7
《C语言习题集》里有跟这个题目相类似的题目,好象在第5章,自己去看
#8
编号为1,2,。。n的n个人按顺时针方向围坐一圈。每人持有一个密码(正整数)。一开始人选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报道m是停止报数,保m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数。如此下去, 直至所有人全部出列位置,设计一个程序求出出列顺序。
struct lnode {
elemtype data; //值域
lnode* next; //指针域
}c_list;
/*建表*/
void create(c_list *hl);/*按要求读入n个数建表*/
/*显示结点值*/
void display(c_list *hl);
/*从循环链表中删除元素*/
void DeleteList(c_list* HL);
/*上面的我就不做了*/
void JSC(int n,int m)
{
int count=1;
struct *head,*p,*q;
create(head);
p=head;
while(p)
{
q=p->next;
if(count==m)
{
display(p);
delectlist(p);
count=1;
p=q;
}
else
{
count++;
p=p->next;
}
}
}
struct lnode {
elemtype data; //值域
lnode* next; //指针域
}c_list;
/*建表*/
void create(c_list *hl);/*按要求读入n个数建表*/
/*显示结点值*/
void display(c_list *hl);
/*从循环链表中删除元素*/
void DeleteList(c_list* HL);
/*上面的我就不做了*/
void JSC(int n,int m)
{
int count=1;
struct *head,*p,*q;
create(head);
p=head;
while(p)
{
q=p->next;
if(count==m)
{
display(p);
delectlist(p);
count=1;
p=q;
}
else
{
count++;
p=p->next;
}
}
}
#9
/* 约瑟夫环 */
#include <stdlib.h>
#include <stdio.h>
typedef struct ENode
{
int Number;
int Cipher;
struct ENode *next;
}enodetype;
void CreateLink(enodetype *head);
void display(enodetype *head);
void DeleteOrder(enodetype *head, int m, int N);
const int N = 7;
int main(int argc, char* argv[])
{
enodetype *head = NULL;
head = (enodetype *)malloc(sizeof(enodetype));
if( head == NULL )
{
printf("内存分配失败!\n");
return 0;
}
head->Number = head->Cipher =0;
head->next = head;
CreateLink(head);
display(head);
int m=20;
DeleteOrder(head,m,N);
printf("\nHello World\n");
return 0;
}
void CreateLink(enodetype *head)
{
int Cipher[N] = {3,1,7,2,4,8,4};
int i=0;
enodetype *p,*newnode;
p = head;
for( i=1; i<=N; i++)
{
newnode = (enodetype *)malloc(sizeof(enodetype));
if( newnode == NULL )
{
printf("内存分配失败!\n");
return ;
}
newnode->Number = i;
newnode->Cipher = Cipher[i-1];
p->next = newnode;
p = newnode;
}
p->next = head->next;//尾结点的指针指向第一个结点.
}
void display(enodetype *head)
{
int i=0;
enodetype *p = head->next ;
printf("显示各结点的编号和密码!\n");
if( p == NULL )
{
printf("The link is Empty\n");
return;
}
// for( i=0; i<N; i++)
do{
printf("cipher[%d] = %d ",p->Number ,p->Cipher );
p = p->next ;
}while( p != head->next);
printf("\n");
}
void DeleteOrder(enodetype *head, int m,int N)
{
int i,j;
enodetype *p ,*q=head;
for( i=0; i<N; i++)q = q->next ;
for( i=0; i<N; i++)
{
p = q;
for( j=0; j<m; j++)
{
q = p;
p = p->next ;
}
q->next = p->next ;
m = p->Cipher;
printf("(%d,%d)",p->Number,m);
free(p);
}
}
#include <stdlib.h>
#include <stdio.h>
typedef struct ENode
{
int Number;
int Cipher;
struct ENode *next;
}enodetype;
void CreateLink(enodetype *head);
void display(enodetype *head);
void DeleteOrder(enodetype *head, int m, int N);
const int N = 7;
int main(int argc, char* argv[])
{
enodetype *head = NULL;
head = (enodetype *)malloc(sizeof(enodetype));
if( head == NULL )
{
printf("内存分配失败!\n");
return 0;
}
head->Number = head->Cipher =0;
head->next = head;
CreateLink(head);
display(head);
int m=20;
DeleteOrder(head,m,N);
printf("\nHello World\n");
return 0;
}
void CreateLink(enodetype *head)
{
int Cipher[N] = {3,1,7,2,4,8,4};
int i=0;
enodetype *p,*newnode;
p = head;
for( i=1; i<=N; i++)
{
newnode = (enodetype *)malloc(sizeof(enodetype));
if( newnode == NULL )
{
printf("内存分配失败!\n");
return ;
}
newnode->Number = i;
newnode->Cipher = Cipher[i-1];
p->next = newnode;
p = newnode;
}
p->next = head->next;//尾结点的指针指向第一个结点.
}
void display(enodetype *head)
{
int i=0;
enodetype *p = head->next ;
printf("显示各结点的编号和密码!\n");
if( p == NULL )
{
printf("The link is Empty\n");
return;
}
// for( i=0; i<N; i++)
do{
printf("cipher[%d] = %d ",p->Number ,p->Cipher );
p = p->next ;
}while( p != head->next);
printf("\n");
}
void DeleteOrder(enodetype *head, int m,int N)
{
int i,j;
enodetype *p ,*q=head;
for( i=0; i<N; i++)q = q->next ;
for( i=0; i<N; i++)
{
p = q;
for( j=0; j<m; j++)
{
q = p;
p = p->next ;
}
q->next = p->next ;
m = p->Cipher;
printf("(%d,%d)",p->Number,m);
free(p);
}
}