100个香至少走三次 150个香蕉最少走7次 200个香蕉至少走13次 与汉诺塔不同 <br/><br/>C程序: <br/><br/>main() <br/>{ <br/>int n,j,i,t,s,l; <br/>/*n为倍数 j为余数 i为步数 t为最大携带数 s为香蕉总数 l为总路程*/ <br/>printf(\"请分别输入香蕉总数,离家路程,最大携带量:\\n\"); <br/>scanf(\"%d%d%d\",&s,&l,&t); <br/><br/><br/><br/><br/>while(s!=0) { <br/>j=s%t; <br/>n=s/t; <br/>i=0; <br/><br/><br/><br/>if(j>2) <br/>{for(;++i;) <br/>if(j-2*i<=i*(2*n-1)+2)break; <br/>l-=i;s-=i*(2*n+1);} <br/><br/><br/><br/>else if(j==0) <br/>{for(;++i;)if(t<=i*(2*n-1))break; <br/>if(tl-=i;s-=i*(2*n-1);} <br/><br/><br/><br/><br/>else s-=j; <br/>} <br/><br/><br/><br/>/*求出猴子把香蕉全部吃完能走多远 <br/>大于离家路程多少单位就是可带回的香蕉个数*/ <br/>l=-l; <br/>if(l<=0)printf(\"\\n猴子带不回香蕉\"); <br/>else printf(\"\\n猴子最多能带回%d个香蕉\",l); <br/>getch(); <br/>} <br/><br/><br/> |