c语言高手帮帮忙 用"指针"做出这道题~谢谢~!!!

2025-02-28 19:23:20
推荐回答(3个)
回答1:

#define A 10 //人数
#define B 3 //间隔数

typedef struct ren
{
int data;
struct ren *link;
}
ren member[A];//人数
for(int i=0;i<=A-2;i++){
member[i]->link=&member[i+1];
member[i]->data=i+1;
}
member[A-1]->link=&member[0];
member[A-1]->data=A;
struct ren *nowptr,*tmpptr;
nowptr=member[A-1]->link;
while (nowptr->link!=nowptr){
for(int j=0;j<=B-2;j++)nowptr=nowptr->link;
tmpptr=nowptr->link
nowptr->link=(tmpptr->link)
}
printf(%d,nowptr->data);

回答2:

#include
#include
#include
//pLeft长度固定为N, 表示队伍中留下人的位置.nLeave是离开的人数, 判断结束
//输出是依次从队伍中离开的人的序号.
int fun(unsigned char *pLeft, int N, int *nLeave, int m, int nStart)
{
int nCount=0,nPoint=nStart;
if(pLeft[nPoint]==1)
nCount++;
while(nCount{
nPoint=nPoint%N+1;
if(pLeft[nPoint]==1)
nCount++;
}
(*nLeave)++;
pLeft[nPoint]=0;
return nPoint;
}

void main(int argc, char *argv[])
{
int n=0,m=0,nLeave=0,nStart=1;
printf("输入 人数n,上限m.\n");
scanf("%d,%d",&n,&m);
unsigned char *pLeft=(unsigned char *)calloc(n+1,sizeof(char));
memset(pLeft,1,(n+1)*sizeof(char));
while(nLeaveprintf("%d\t",nStart=fun(pLeft, n, &nLeave, m, nStart));
free(pLeft);
}

---------输出,20个人,m=26------------
输入 人数n,上限m.
20,26
6 13 1 11 3 17 14 12 16 2
10 8 15 5 9 18 20 7 4 19

回答3:

可以用数组或链表,都可以实现
作业题就不想答了