小猴编程答案
Ⅰ c语言编程 猴子吃桃问题 描述: 一天一只猴子摘下一堆桃子,吃了一半,觉得不过瘾,又多吃了一个,第2天接
#include<stdio.h>
main()
{
int x, i;
for(x = 1, i = 0; i < 9;++i)
{
x = 2 * (x + 1);
printf("%d", x);
}
}
Ⅱ 编程,猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第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();
Ⅲ 一个有关猴子吃桃子的编程题,用c语言循环语句怎么做
1、首先在电脑中打开vc6.0,新建一个项目,添加头文件,如下图所示。
Ⅳ 简单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);
}
Ⅳ 编程 猴子吃桃问题 猴子第一天摘下若干个桃子当机吃了一半还不过瘾又吃了一个 以后每天早
先分析问题:用逆向思维来思考它,根据题意“以后每天早上吃前天剩下的一半零一个”,则我们可以用逆向思维来推导它,即从第十天往前推。已知第十天有一个,根据题意第九天应该就是(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;
}
Ⅵ 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),对于题目给出的数据范围显然可以胜任。
Ⅶ c语言编程解决小猴爬山
上山下山应该是一样的,都是让电脑一个值一个值去判断。我的想法是让电脑先判断出所有可能的组合,比如2+3+5和3+2+5是一个概念,然后建立一个排列组合的函数,对组合进一步处理。上山为例:
#include<stdio.h>
intjc(inta)//阶乘
{
inti,j=1;
for(i=a;i>0;i--)
{
j=j*i;
}
returnj;
}
intmain(intargc,char*argv[])
{
intn;//方法数
constintt=50;//台阶数
inti,j,k;
for(i=0;i<=25;i++)//2*25=50
for(j=0;j<17;j++)//3*16=48
for(k=0;k<13;k++)//4*12=28
{
if(2*i+3*j+4*k==t)//两步、三步或四步
{
n=n+jc(i+j+k)/(jc(i)*jc(k)*jc(j));
}
}
printf("上山总数为:%d种 ",n);
return0;
}
这个程序计算出来上山有3731种
Ⅷ 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语言编程 小猴吃了5个桃子,大猴吃的是小猴的3倍少1,编程并输出他们共吃多少桃
……这还要编程
#include<stdio.h>
void main()
{
int a=5;
printf("一共吃了%d个桃\n",a+3*a-1);
}
Ⅹ 编程求解 猴子吃桃问题。 第一天摘下桃子若干,当即吃掉一半,又多吃一个 第2天将剩余部分吃掉一半还
512个,因为是一半关系所以可以逆着在原数1加两倍因为后面的1是前面的一半,那后面的就是1的两倍,以此类推就是1、2、4、8、16、32、64、128、256、512。所以最后答案是512