当前位置: 代码迷 >> C语言 >> [求助]一道猴子分苹果的题~试着用c做,没做出来~
  详细解决方案

[求助]一道猴子分苹果的题~试着用c做,没做出来~

热度:152   发布时间:2005-08-22 13:52:00.0
对不起啊

错了。

上面那是最后那H要拿的,也就是剩下4*“那个”

有规律
----------------解决方案--------------------------------------------------------
那式子从中间往外,一层一层看。
----------------解决方案--------------------------------------------------------

(a-1-

(a-1-

(a-1-

(a-1-

(a-1)/5 //第一个拿的

)/5 //第二

)/5 //第三

)/5 //第四

)/5 //最后


----------------解决方案--------------------------------------------------------
#include<stdio.h> main() { float f; int a,b,i,c; c=6; i=100; for(a=1;a<i;a++) { for(b=1;b<c;b++) { f=(a-1.)*4./5.; if(f-(int)f==0) continue; else break; } if(f-(int)f==0) printf("\n all=%f,last=%d",a,f); } return 0; }
----------------解决方案--------------------------------------------------------
#include<stdio.h> main() { float f; int a,b,i,c; c=6; i=100; for(a=1;a<i;a++) { for(b=1;b<c;b++) { f=(a-1.)*4./5.; if(f-(int)f==0) continue; else break; } if(f-(int)f==0) printf("\n all=%f,last=%d",a,f); } return 0; }
----------------解决方案--------------------------------------------------------
这道题用一般的 数学方法我觉得作不出来,所以想用c做个穷举法,fanfan200830 的思路我 觉得是对的,只是编出来的程序还是不对~ 郁闷~
----------------解决方案--------------------------------------------------------
是不是最后省下的一定是5个苹果啊?


----------------解决方案--------------------------------------------------------

这是我写的,编译能过,但是运算的结果始终出错,请指点一下: PS:我用的是DEV-C++ #include <stdio.h> #include <stdlib.h>

int last(void); int all(int a);

int main() { int n,sum; n=last(); printf("最后剩下%d个苹果\n",n); sum=all(n); printf("一共有%d个苹果\n",sum); system("pause"); return 0; }

int last(void) { int a1,a2,i,z; for(a1=1;a1<=10000;a1=a1++) { a2=a1; for(i=1;i<=5;i++) { a2=(int)((a2/4)*5+1); z=a2%5; if(z==1) { if(i==5) return a1; else continue; } else break; } } }

int all(int a) { int i; for(i=1;i<=5;i++) a=(a/4)*5+1; return a; }


----------------解决方案--------------------------------------------------------

发错了,应该是这个: #include <stdio.h> #include <stdlib.h>

int last(void); int all(int a);

int main() { int n,sum; n=last(); printf("最后剩下%d个苹果\n",n); sum=all(n); printf("一共有%d个苹果\n",sum); system("pause"); return 0; }

int last(void) { int a1,a2,i,z; for(a1=1;a1<=10000;a1=a1++) { a2=a1; for(i=1;i<=5;i++) { a2=(int)((a2/4)*5+1); z=a2%5; if(z==1) { if(i==5) return a1; else continue; } else break; } } }

int all(int a) { int i; for(i=1;i<=5;i++) a=(a/4)*5+1; return a; }


----------------解决方案--------------------------------------------------------

这次做出来了,答案是一共有3121个苹果,最后剩下1020个苹果,程序如下: #include <stdio.h> #include <stdlib.h>

int main(void) { int a,b,c; for(a=6;a<=10000;a+=5) { c=a; for(b=1;b<=5;b++) { c=(c-1)/5*4; if((c-1)%5==0&&b!=5) continue; else break; } if(b==5) { printf("最后剩下%d个苹果\n",c); printf("总共有%d个苹果\n",a); break; } } system("pause"); return 0; } PS:但是我一直不清楚以前得算法有什么不对得地方,请高手指点一下


----------------解决方案--------------------------------------------------------
  相关解决方案