void main(){
int i,s,n,k,num//定义s为最初桃子的数量;巧掘num为最初桃子数减去k
scanf("%d%d",&n,&k)
for(num=nnum<=65535num+=n)//因为可以被分成n份,num一定是n的倍数。
{ s=num+k
for(i=1i<=ni++)//i用来控制n次循环,即分n次
if(s%n==k)//判断桃子能否被分n份并余下一个,成立就开始往下分,
s=(s-k)*(n-1)/n
else
break//不成立迹宽塌就直接跳出,不用执行后面的循环,即分不下去了
if(i==n+1)//注意:n次循环之后,i值为n+1。既然已经分了n次,那么num就找到了。姿圆
{
s=num+k
printf("海滩上原来最少有%d个桃子\n",s)
break }
}}
#include <stdlib.h>#include<stdio.h>
#define N 10
#define M 20
struct monkey
{
int id
int tao
}
struct queue
{
struct monkey content[N]
struct monkey* head
struct monkey* tail
int length
}
int queue_init(struct queue** q)
{
(*q) = (struct queue*)malloc(sizeof(struct queue))
(*q)->head = &(*q)->content[0]
(*q)->tail = &(*q)->content[0]
(*q)->length = 0
return 0
}
int queue_in(struct queue* q,struct monkey in)
{
if(q->length == 0)
{
*(q->tail) = in
q->length++
}
else
{
q->tail++
*(q->tail) = in
q->length++
}
return 0
}
int queue_out(struct queue* q, struct monkey* out)
{
int i = 0
*(out) = *(q->head)
for(i <q->length-1i++)
q->content[i] = q->content[i+1]
q->tail--
q->length--
return 0
}
//队启缺首到队尾
int queue_a(struct queue* q)
{
struct monkey temp
queue_out(q, &temp)
queue_in(q,temp)
return 0
}
int main()
{
struct monkey data[N]
struct queue* q = NULL
struct monkey temp
int i
int kuang = 0
for(i=0i<Ni++)
{
data[i].id = i+1
data[i].tao = 0
}
queue_init(&q)
for(i=0i<Ni++)
queue_in(q, data[i])
for(i=0i<Ni++)
{
printf("%d\t%d\n",q->content[i].id,q->content[i].tao)
}
printf("leng=%d\n",q->基磨length)
printf("head %d\t tail %d\搏旁斗n",q->head->id,q->tail->id)
i = 0
while(q->length != 0)
{
if(kuang == 0)
{
i++
kuang += i
}
//队首猴取桃
if(q->head->tao + kuang <M)
{
q->head->tao += kuang
kuang = 0
queue_a(q)
}
else
{
kuang -= M - q->head->tao
q->head->tao += M - q->head->tao
queue_out(q, &temp)
printf("%d\t%d\n",temp.id,temp.tao)
}
}
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)