要求請輸入人數、約定編號數,出列值 即環的個數,起始位置,以及每隔幾個輸出。
例:輸入7 3 3 最后會得到3627514
代碼如下:
#include<stdio.h>
#include<stdlib.h>
typedef struct Lnode
{
int data;
struct Lnode *next;
}joseph;
void Create_List(joseph *L,int n)
{
int i;
joseph *p,*s;
p =s = L;
for(i=2;i<=n;i++){
s=(joseph*)malloc(sizeof(joseph));
s->data =i;
p->next=s;
p=s;
}
p->next = L;
}
void Delete_List(joseph *p,joseph *q)
{
q-> next= p-> next;
free(p);
}
void josephus ( joseph *L, int s, int m)
{
int length;
length= sizeof(L)-1;
int i,j;
static joseph *p,*q,*Y;
p = L;
for(i=1;i<length;i++){
if(i==1){
for(j=1;j<s-1;j++){
p=p->next;
}
q=p->next;
p-> next= q-> next;
Y->data = q->data;
Y=Y->next;
free(q);
}else{
for(j=1;j<m;j++){
p=p->next;
}
q=p->next;
p-> next= q-> next;
Y->data = q->data;
Y=Y->next;
free(q);
}
}
printf("\n");
printf("%4d\n",Y->data);
return L;
}
void main()
{
joseph *L=NULL;
int m,n,s;
L=(joseph*)malloc(sizeof(joseph));
L->data=https://bbs.csdn.net/topics/1;
printf ("請輸入人數、約定編號數,出列值:\n");
scanf ("%d%d%d", &n, &s, &m);
if ((m> 1000) || (n> 1000))
printf ("輸入的人數m,n不合法\n");
else
if (s>n) printf ("輸入資料不合法!\n");
else
{
Create_List(L, n);
printf ("\n");
josephus(L,s,m);
}
}
運行結果與部分除錯數值如下:
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/179338.html
標籤:C語言
