當前位置:首頁 » 編程軟體 » 編程題猴子

編程題猴子

發布時間: 2022-05-09 17:14:06

c語言編程題,關於猴子分桃問題

正確的答案是3121。
手工驗算一下吧,又不難的!
#include
<stdio.h>
//判斷能否被合理的分配
int
divide(int
n,int
m)
{
if(n/5==0
||
n%5!=1)
{//不足5個或不能分5份多1個,分配失敗
return
0;
}
if(m==1)
{//分到最後一個猴子,說明能分配成功
return
1;
}
return
divide(n-n/5-1,m-1);
}
main()
{
int
n;//桃子數量
for(n=1;;n++)
{
if(divide(n,5))
{//判斷能否被合理的分配
printf("%d\n",n);
break;
}
}
}

⑵ 一個有關猴子吃桃子的編程題,用c語言循環語句怎麼做

1、首先在電腦中打開vc6.0,新建一個項目,添加頭文件,如下圖所示。

⑶ 編程 猴子吃桃問題 猴子第一天摘下若干個桃子當機吃了一半還不過癮又吃了一個 以後每天早

先分析問題:用逆向思維來思考它,根據題意「以後每天早上吃前天剩下的一半零一個」,則我們可以用逆向思維來推導它,即從第十天往前推。已知第十天有一個,根據題意第九天應該就是(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;
}

⑷ 編程:猴子吃桃子問題

#include<stdio.h>
int
main()
{
int
i,a[11];
a[0]=1;//今天桃子數,(0天前桃子數)
for(i=2;i<10;i++)
//i天前桃子數與i-1天前桃子數關系
a[i]=2*(a[i-1]+1);
printf("%d\n",a[9]);
return
0;
}

⑸ c/c++/java編程題:聰明的猴子,高分急求大神解答!題目描述如圖

能否把樣例輸出給出,方便驗證演算法的正確性

下面交流下我的思路

首先我們吧問題轉化,變成你一開始有一個原始數字0,你每次可以從數列a中取出一個給他加上或者減去,求可以到達的最小正整數,如果這個數字等於1,那麼就說明a這個序列符合要求

然後我們發現這個加加減減的過程很類似 輾轉相除法 ,那麼顯然對於一個數列a 如果其中有兩個數字互質,那這個數列就一定符合要求,同樣的,如果沒有兩個數字是互質的,那麼這個數列就一定不符合要求。

由於 gcd(1,x)=1 所以也就是說a是符合要求的,當且僅當a中所有元素的gcd=1

這樣問題就變成了要求一個序列 a ,要求a中的元素都小於等於B,a 中的最後一個元素為B,且a中所有元素的gcd=1,而這個問題顯然可以使用莫比烏斯反演解決

復雜度O(B),對於題目給出的數據范圍顯然可以勝任。

⑹ vb中如何編程這個題 猴子吃桃(一天吃掉一半多一個,第二天吃掉盛下的

Private Sub Command1_Click()

s = 1

For i = 7 To 1 Step -1

s = 2 * s + 1

Next i

Print "桃子的數量="; s

End Sub

⑺ C語言編程題目(猴子吃桃問題,加密解密問題等),一共五個題目。求大神解答一下,謝謝!

第一個
void move(int a[], int b[], int n, int m) {

for (int i = 0; i < (n - m); i++) {

b[i + m] = a[i];

}

for (int i = 0; i < m; i++) {

b[i] = a[i + n - m];

}

}
第二個
void f(char a[], unsigned int n) {
char str[] = "0123456789abcdef";
int k=0;
for (int temp = n; temp > 0; temp >>= 4, k++);
for (int i = k ; i != 0; i--) {
a[i - 1] = str[n % 16];
n >>= 4;
}
a[k] = '\0';
}

第三個,我明顯復用了第二個的代碼。
void f10(char a[], unsigned int n) {
char str[] = "0123456789";
int k = 0;
for (int temp = n; temp > 0; temp /= 10, k++);
for (int i = k ; i != 0; i--) {
a[i - 1] = str[n % 10];
n /= 10;
}
a[k] = '\0';
}
int sum() {

char a[5];
int iSum = 0;
for (int i = 200; i <= 1000; i++) {
f10(a, i);
for (int j = 0; a[j]!='\0'; j++) {
if (a[j] == '1') iSum += 1;
}
}
return iSum;
}

第四個遞歸即可
int daytotal(int n) {
if (n == 1) return 1;
else return (daytotal(n - 1) + 1) * 2;
}
int total() {
return daytotal(10);
}

最後一個:
void f10t4(char a[], unsigned int n) {
char str[] = "0123456789";
for (int i = 4; i != 0; i--) {
a[i - 1] = str[n % 10];
n /= 10;
}
a[4] = '\0';
}
char * encript(int n) {
char *in = (char*)malloc(4 * sizeof(char));
char temp;
f10t4(in, n);
for (int i = 1; i != 0; i--) {
temp = in[i] + 5;
if (temp > '9') temp -= 10;
in[i] = in[3 - i] + 5;
if (in[i] > '9') temp -= 10;
in[3 - i] = temp;
}
return in;
}
char * decript(int n) {
char *in = (char*)malloc(4 * sizeof(char));
char temp;
f10t4(in, n);
for (int i = 1; i != 0; i--) {
temp = in[i] - 5;
if (temp < '0') temp += 10;
in[i] = in[3 - i] - 5;
if (in[i] < '0') temp += 10;
in[3 - i] = temp;
}
return in;
}

⑻ c++編程猴子吃桃問題

#include"stdafx.h"
#include<iostream>
usingnamespacestd;

intmain()
{
intDAY=7;//假設是7天後發現只剩下一個
inttotal=1;//最後剩下一個
//從最後一天往回推
for(inti=1;i<=DAY;i++)
{
total=(total+1)*2;
}
cout<<"桃子總個數是:"<<total<<endl;
system("pause");
}

⑼ C語言編程猴子吃桃子問題

猴子只吃了99次。第100次還沒吃呢。

只是這求到100天之前,這數字也是太大了吧?

int早就溢出了。

用double只能保證前面的大數正確,後面的尾數就全變為0了(否則要使用高精度計算,編程代碼就復雜多了):

#include<stdio.h>
intmain()
{intday=99;
doublex1,x2=1;
while(day)
{x1=(x2+1)*2;x2=x1;day--;}
printf("%.0lf ",x1);
return0;
}

⑽ 簡單C語言循環語句編程題目! 猴子摘了一堆桃子。第一天吃了一半,覺的不過癮,又多吃了一個,第二天吃了

#include<stdio.h>
voidmain()
{
intday,x1,x2;
day=5;
x2=1;
while(day>0)
{
x1=(x2+1)*2;
x2=x1;
day--;
}
printf("total=%d ",x1);
}

熱點內容
appleid為什麼連接伺服器出現問題 發布:2025-05-13 18:17:37 瀏覽:970
書翁怎麼配置 發布:2025-05-13 18:17:36 瀏覽:911
雲資料庫mongodb 發布:2025-05-13 18:16:12 瀏覽:773
A7編程 發布:2025-05-13 18:15:26 瀏覽:741
python視圖 發布:2025-05-13 18:14:01 瀏覽:758
win為什麼干不過安卓 發布:2025-05-13 18:12:27 瀏覽:586
文件夾只讀win8 發布:2025-05-13 18:11:41 瀏覽:272
xp安裝php 發布:2025-05-13 18:04:30 瀏覽:183
sqlserver介紹 發布:2025-05-13 17:58:00 瀏覽:4
雲閃付安卓版哪個版本好用 發布:2025-05-13 17:57:16 瀏覽:187