📄 abc.c
字号:
#include <stdio.h>
#include <malloc.h>
typedef struct node /*建立学生的糖果存储结构*/
{
int num;
struct node *next;
}link;
/*typedef struct result /*储存每一轮的结果 TURN 是次数 CANDY是相等时的糖果数
{
int turn;
int candy;
}show;*/
#define createnode(p) p=(link*)malloc(sizeof(link))
#define deletenode(p) free((void*)p)
link *createlist(int n) /*建立学生的循环链表 N 表示学生的围成一圈的人数*/
{
int i,temp;
link *h,*p,*q;
createnode(h);
p=h;
scanf("%d",&temp);
h->num=temp;
for(i=1;i<n;i++)
{
scanf("%d",&temp);
createnode(q);
q->num=temp;
p->next=q;
p=q;
}
p->next=h;
return h;
}
int iseven(int x)
{
int i;
if(x%2==0)i=1;
else i=0;
return i;
}
int isequal(link *h) /* 判断链表的各元素是否相等 如相等返回1 否则返回0*/
{
int flag=0;
link *p;
p=h->next;
while(p->num==h->num&&p!=h)p=p->next;
if(p==h)flag=1;
return flag;
}
int whistle(link *h) /*开始随着老师的哨声分配糖果 最后返回当 每个人的糖果都相等时老师一吹了多少声N*/
{ int n=0,temp,q;
link *p;
while(1)
{
p=h->next;
temp=h->num/2;
if(isequal(h))break; /*equal(link *h)判断链表的各元素是否相等*/
else n++;
while(p!=h)
{
q=p->num/2;
p->num=p->num/2+temp;
if(!iseven(p->num))p->num=p->num+1; /*如为奇数 NUM自加1*/
temp=q;
p=p->next;
}
h->num=h->num/2+temp;
if(!iseven(h->num))h->num=h->num+1;
}
return n;
}
/*
void showlist(link *h)
{
link *p;
p=h->next;
printf("%d",h->num);
while(p!=h){printf(" %d",p->num);p=p->next;}
}*/
int main()
{
int n,w;
int i=0,j;
int a[100];
link *h;
printf("input the number of student n:\n");
while(1)
{
scanf("%d",&n);
if(n==0)break;
h=createlist(n);
/* showlist(h);*/
w=whistle(h);
/*showlist(h);*/
a[i]=w;
a[i+1]=h->num;
i=i+2;
/* printf("%d %d\n",w,h->num);*/
}
for(j=0;j<i;j=j+2)
printf("%d %d\n",a[j],a[j+1]);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -