⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 joseph.c

📁 编号为1
💻 C
字号:
#include"stdio.h"
#include"stdlib.h"
#define MAXPASSWORDVALUE 20
#define MAXPERSONNUMBER  30
#define MAXFIRSTVALUE 20
typedef struct Node
{
int data;
int password;
struct Node *next;
}Node, *LinkList;
/****************************************
函数的声明
****************************************/
void CreatLinkList(LinkList *);
void InitLinkList(LinkList *,int );
int  GetPassword();
int  GetPersonNumber();
int  GetFirstCountValue();
void GetOutputOrder(LinkList* , int, int, int* );
void printResult(int * ,int );

/*构建单链表*/
void CreatLinkList(LinkList *L)
{
(*L) = (LinkList)malloc(sizeof(Node));
if ((*L) == NULL)
{
printf("memory allocation failed");
exit(1);}}

/*初始化单链表*/
void InitLinkList(LinkList *L, int personNumber)
{
Node *p, *q;
int i ;
p = (*L);
p->data = 1;
p->password = GetPassword();
for (i = 2; i <= personNumber; i++)
{
q = (LinkList)malloc(sizeof(Node));
if (q == NULL)
{
printf("memory allocation failed, goodbye");
exit(1);
}
q->password = GetPassword();
q->data = i;
p->next = q;
p = q;
}
p->next = (*L);}

/*确定需要处理的人数*/
int GetPersonNumber()
{
int personNumber;
printf("请输入需要输入人的数目:");
scanf("%d",&personNumber);
while (personNumber > MAXPERSONNUMBER || personNumber < 0)
{
printf("\n你输入的数字无效,请输入在0到%d的整数",MAXPERSONNUMBER);
scanf("%d",&personNumber);
}
printf("最终确定的人数为%d\n",personNumber);
return personNumber;}

/*给每个人赋密码*/
int GetPassword()
{
int password;
static int count = 1;

printf("\n请输入第%d的密码:",count);
scanf("%d",&password);
while (password > MAXPASSWORDVALUE || password < 0)
{
printf("您输入的数字无效,请输入在0到%d的整数:",MAXPASSWORDVALUE);
scanf("%d",&password);
}
printf("第%d个人的密码为%d",count,password);
count++;
return password;}

/*确定开始的上限值*/
int GetFirstValue()
{
int firstValue;
printf("请输入初始的上限值");
scanf("%d",&firstValue);
while (firstValue > MAXFIRSTVALUE || firstValue < 0)
{
printf("\n你输入的数字无效,请输入在0到%d的整数",MAXFIRSTVALUE);
scanf("%d",&firstValue);
}
printf("最终的上限值为%d",firstValue);
return firstValue;}

/*得到出队顺序*/
void GetOutputOrder(LinkList *L, int personNumber, int reportValue, int array[MAXPERSONNUMBER])
{
Node *p, *q;
int count = 1, i = 0;
p = (*L);
while (personNumber)
{
while (count != reportValue)
{
q = p;
p = p->next;
count++;
}
array[i++] = p ->data;
reportValue = p->password;
q->next = p->next;
free(p);
p = q->next;
count = 1;
personNumber--;}}

/*输出结果*/
void printResult(int array[],int personNumer)
{
int i;
printf("\n出队的顺序为:");
for(i = 0; i < personNumer; i++)
{
printf("%-3d",array[i]);
}
printf("\n");
}
/*主函数*/
int main(void)
{
LinkList L;
int personNumber, reportValue;
int array[MAXPERSONNUMBER];
personNumber = GetPersonNumber();
reportValue = GetFirstValue();
CreatLinkList(&L);
InitLinkList(&L, personNumber);
GetOutputOrder(&L, personNumber, reportValue, array);
printResult(array, personNumber);
system("pause");
return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -