编程题猴子
正确的答案是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);
}