约瑟夫环,删除后,剩下最后一个数字

来源:互联网 发布:开票软件登录 编辑:程序博客网 时间:2024/05/01 00:02

 对原来的约瑟夫环进行修改:剩下最后的一个数字,并返回此数字在原来数组中的下标。

#include<stdio.h>#include<stdlib.h>typedef struct student{int data;int index;struct student *next;}node;int hwyuesefu(int *a,int n,int k,int m){int i=0;node *p,*t,*r,*curr;p=(node *)malloc(sizeof(node));p->data=a[i];p->index=0;p->next=p;curr=p;for(i=1;i<n;i++){t=(node *)malloc(sizeof(node));t->data=a[i];t->index=i;curr->next=t;curr=t;}curr->next=p;while(p->next!=p){for(int j=0;j<=m-1;j++){r=p;p=p->next;}r->next=p->next;printf("%d->",p->data);free(p);p=r->next;}printf("\n");printf("the last data is:");printf("%d\n",p->data);return (p->index);}void main(){int index;int a[8]={6,3,7,9,8,0,4,10};index=hwyuesefu(a,8,0,2);printf("the index of the last data is:");printf("%d\n",index);}


运行结果:

7->0->6->8->3->10->9->
the last data is:4
the index of the last data is:6