猴子分桃問題c語言
❶ 猴子分桃問題,c語言,急~~~
答案是:至少剩8188,原來至少84371
/*猴子分桃改版*/
#include <stdio.h>
int main()
{
int previous (int current, int share, int remaining); /*定義分桃函數,current分完剩下數值,share份數,remaining被吃的余數,返回值為分前數目*/
int monkeyNum1=3, monkeyNum2=5; /*兩組猴子數*/
int peachNum, peachNumr; /*桃子的總數和最後剩下的數目*/
int i,j; /*中間變數*/
for (i=1;i<10000;i++)
{
peachNum=i;
for(j=1;j<=monkeyNum2;j++)
{
peachNum=previous(peachNum, monkeyNum2, 1);
if(peachNum==0)
break;
}
if(peachNum==0)
continue;
for(j=1;j<=monkeyNum1;j++)
{
peachNum=previous(peachNum, monkeyNum1, 2);
if(peachNum==0)
break;
}
if(peachNum==0)
continue;
else
break;
}
peachNumr=i;
printf("At last remaining: %d\nNumber of all the peaches: %d\n",peachNumr,peachNum);
return 0;
}
int previous (int current, int share, int remaining)
{
int previousNum;
previousNum=current*share/(share-1)+remaining;
if(previousNum%share!=remaining)
return 0;
return previousNum;
}
❷ 用C語言編一程序 猴子分桃的問題
摘的數量最少是什麼樣的情況?我想應該滿足:
1,第5隻猴子有桃子吃;
2,第5隻猴子在醒後吃桃子之前把桃子平均分成了5份,而且還多了一個桃子(隱含意義是第5隻猴子吃了2個桃子,剩下4個桃子,這樣才滿足摘的數量最少);
那麼我們就知道了,最後一個猴子(將猴子數量擴展為未知,猴子數為n)醒後還有n+1個桃子;
第n-1個猴子醒後還有n*(n+1)+1個桃子;
第n-2個猴子醒後還有n*(n*(n+1)+1)+1;
以此類推,可由遞歸算出桃子總數
❸ C語言程序設計——猴子分桃
#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-1;i++)
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=0;i<N;i++)
{
data[i].id = i+1;
data[i].tao = 0;
}
queue_init(&q);
for(i=0;i<N;i++)
queue_in(q, data[i]);
for(i=0;i<N;i++)
{
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;
}
❹ c語言:五猴分桃問題
4/5是整型運算,會導致結果為0
於是後續a一直是0
無法退出循環