編程猴
❶ c++編程猴子選大王 猴子按1…、n編號順時針方向圍坐一圈,從第1號開始按1、…m報數,凡報到m號的退出圈外
p=q是改變頭結點,讓新插入的處於鏈表頭 如果忽略頭Head->next = head就是單鏈表了
❷ 計算機編程c++ 猴子分桃
#include<iostream>
#include<map>
usingnamespacestd;
longlongfastpow(inta,intb){
longlongans=1;
longlongtemp=a;
while(b){
if(b&1){
ans*=temp;
}
temp*=temp;
b>>=1;
}
returnans;
}
intmain(){
intN,M;
cin>>N>>M;
longlongleft=(M-1)*(fastpow(M-1,N-1)-1);
if(left==0){
left=M-1;
}
cout<<left<<endl;
for(inti=0;i<N;i++){
if(left%(M-1)){
cout<<"ERROR:"<<left;
}
else{
left=left/(M-1)*M+1;
}
}
cout<<left<<endl;
}
❸ c語言編程:猴子第一天摘下若干個桃子,當即吃了一半,還不過癮,又多
#include<stdio.h>
int main(void)
{
int a,y;
long long int x=1;
scanf("%d",&a);
for(y=a;y>1;y--)
{
x=(x+y-1)*2;
}
printf("The monkey got %ld peachs in first day.\n",x);
}
❹ 編程 猴子吃桃問題 猴子第一天摘下若干個桃子當機吃了一半還不過癮又吃了一個 以後每天早
先分析問題:用逆向思維來思考它,根據題意「以後每天早上吃前天剩下的一半零一個」,則我們可以用逆向思維來推導它,即從第十天往前推。已知第十天有一個,根據題意第九天應該就是(1+1)*2=4個,第八天應該就是(4+1)*2=10,第七天應該就是(10+1)*2=22,第六天應該就是(22+1)*2=46,
依此類推,直至第1天應該就是第2天(766+1)*=1534個桃子,即猴子第一天摘了1534個桃子。
為了驗證這個推導的正確性,你可以按正常邏輯來把它(即此時由前往後)推導,即由第一天1534個桃子,第二天就是1534/2-1=766個桃子,依此類推,直至第十天,那麼猴子此時就會發現只剩一個。
至此,我們由了推導的思想,再來編寫的代碼,就是小菜一碟的事情啦,實現的它方式無非就是那麼兩種,一種是簡單的for循環,另一種是遞歸。這里我採用遞歸,因為解決此類問題往往用遞歸來思考它,會讓問題變得更簡單。按照數學思維來說 就是求未知數,則可以根據已知數出發進行求解(那麼這里的已知數已經告訴了我們,它說第十天只有一個桃子)。
下面是我的遞歸演算法來求解它的方法:
#include<iostream>
usingnamespacestd;
intrecurrent_monkey(intdays)//猴子吃桃遞歸
{
intpeach;
if(days==10)peach=1;//遞歸出口條件(已知條件第10天只有一個桃子)
elsepeach=(recurrent_monkey(days+1)+1)*2;
returnpeach;
}
intmain()
{
intdays=1;
cout<<recurrent_monkey(days)<<endl;
}
❺ 用matlab編程解決猴子吃桃問題
我也來湊個熱鬧,利用遞歸演算法,得到桃子數目
將下面程序復制,建一個StealPeach.m文件,保存。
輸入StealPeach即可
%函數StealPeach.m利用遞歸演算法求解猴子偷桃問題
%變數說明:
% days 只剩下最後一個桃的天數
% Numbers 第一天的桃數目
% 函數沒有輸出,最終列印總的桃子數目
function StealPeach
days=input('請輸入第幾天只剩下一個桃:');
Numbers=count(1,days);
fprintf('第一天總共有桃子數目為:%5.0f\n',Numbers);
%-----------------------------------------------%
%函數count.m作為一個子函數,遞歸求解桃子數目
%變數說明:
% i 控制偷桃天數,起始為1
% days 只剩下最後一個桃的天數
% Numb 第一天的桃數目
function Numb=count(i,days)
if i==days %當偷桃到最後一天時,只有一個桃子
Numb=1;
return;
else %第i天擁有桃子數是i+1天的2倍,還多一個
Numb=2*count(i+1,days)+2;
end
====================================================================
其實沒這么多語句的,只利用子函數,也可以的,如果你單獨復制保存,然後輸入 count(1,10)
運行得到的結果,也是1534
❻ 用C++編程 猴子選大王
#include <iostream>
using namespace std;
template <class datatype> class LinkList;
template <class datatype>
class Node
{
friend class LinkList<datatype>;//友元類
private:
datatype data;//計猴子號
Node<datatype> *next;
};
template <class datatype>
class LinkList
{
public:
LinkList();
void monkey(int m); //建立有m個元素的單鏈表
datatype Get(int a); //取單鏈表中第i個結點的元素值
datatype Delete(int n); //在單鏈表中刪除第n個結點
private:
Node<datatype> *head,*tail; //單鏈表的結構指針
};
template <class datatype>
LinkList<datatype>:: LinkList( )
{head=new Node<datatype>; head->next=NULL;}
template <class datatype>
void LinkList<datatype>::monkey(int m)
{
int i;//整型變數i,用於計數
Node<datatype> *p,*q;//聲明結構指針
p=new Node<datatype>;//為p分配空間
p->data=1; //初始化p結點data域為1
p->next=NULL;//初始化p結點next域為空
head=p;//鏈表頭指針head賦值為p
q=p; //q賦值為p
for (i=2; i<=m; i++) //用循環結構構造鏈表
{
p=new Node<datatype>;//為p配內存空間
p->data=i; //初始化p結點data域為i,表示猴子號
q->next=p; //將p點加到鏈表尾部
q=p; //讓指向鏈表尾部結點
p->next=NULL; //鏈表尾部為空
}
tail=q;//鏈表尾
tail->next=head;//鏈表尾部指向鏈表頭,形成循環鏈表
}
template <class datatype>
datatype LinkList<datatype>::Delete(int n)
{
Node<datatype> *p,*q;
int j=0;
q=tail; //指向循環鏈表尾部
cout<<"被刪除的猴子號碼依次為:"<<endl;
while (q!=q->next) //剩餘結點數不為1,則繼續循環
{
p=q->next;//p賦值給下一個相鄰結點
j++;
if(j%n==0)
{
cout<<p->data<<ends;
q->next=p->next;//刪除此結點
delete p;//釋放空間
p=NULL;
}
else q=p;//q指向相鄰的下一個結點p
}
cout<<endl;
head=q;//head指向結點q,q為鏈表中剩餘的一個結點
return head->data;
}
template <class datatype>
datatype LinkList<datatype>::Get(int a)
{
Node<datatype> *p;
int j;//計數器
p=head->next; j=1; //或p=head; j=0;
while (p && j<a)
{
p=p->next; //工作指針p後移
j++;
}
if (!p) throw "a值不合法";
else return p->data;
}
void main()
{
int m,n;
LinkList<int>mon;
cout<<"請輸入猴子的總數:"<<endl;
cin>>m;
cout<<"請輸入要刪除猴子的所報的數:"<<endl;
cin>>n;
mon.monkey(m);
mon.Delete(n);
cout<<"猴王是:"<<mon.Get(1)<<"號"<<endl;
}
❼ 用matlab編程解決猴子吃桃問題
我也來湊個熱鬧,利用遞歸演算法,得到桃子數目
將下面程序復制,建一個StealPeach.m文件,保存。
輸入StealPeach即可
%函數StealPeach.m利用遞歸演算法求解猴子偷桃問題
%變數說明:
%
days
只剩下最後一個桃的天數
%
Numbers
第一天的桃數目
%
函數沒有輸出,最終列印總的桃子數目
function
StealPeach
days=input('請輸入第幾天只剩下一個桃:');
Numbers=count(1,days);
fprintf('第一天總共有桃子數目為:%5.0f\n',Numbers);
%-----------------------------------------------%
%函數count.m作為一個子函數,遞歸求解桃子數目
%變數說明:
%
i
控制偷桃天數,起始為1
%
days
只剩下最後一個桃的天數
%
Numb
第一天的桃數目
function
Numb=count(i,days)
if
i==days
%當偷桃到最後一天時,只有一個桃子
Numb=1;
return;
else
%第i天擁有桃子數是i+1天的2倍,還多一個
Numb=2*count(i+1,days)+2;
end
====================================================================
其實沒這么多語句的,只利用子函數,也可以的,如果你單獨復制保存,然後輸入
count(1,10)
運行得到的結果,也是1534
❽ 編程,猴子吃桃問題:猴子第一天摘下若干個桃子,當即吃了一半,還不過癮,又多吃了一個。第2天早上將
int day, x1, x2;
day = 9;
x2 = 1;
while (day > 0)
{
x1 = (x2 + 1) * 2; /*第一天的桃子是第二天桃子數加1後的2倍*/
x2 = x1;
day--; /*因為從後向前推所以天數遞減*/
Console.WriteLine("the total is {0}", x1);
Console.ReadKey();