五只猴子采得一堆桃,它们约定次日早起来分。半夜里,一只猴子偷偷起来,把桃均分成五堆后,发现还多一个,它吃了这桃子,拿走了其中一堆。第二只猴子醒来,又把桃子均分成五堆后,还是多了一个,它也吃了这个桃子,拿走了其中一堆。第三只,第四只,第五只猴子都依次如此做了。问桃子数最少有多少个?
要求:(1)使用面向对象编程!
(2)使用递归的方法编写!
要求:(1)使用面向对象编程!
(2)使用递归的方法编写!
5*x3+1=x2
5*x4+1=x3
5*x5+1=x4
5*x6+1=x5最小的x6=1
依次往上,求出x1
{
int i;
int m;
int j = 0;
int k;
int count;
for (i = 4; i < 10000; i += 4)
{
count = 0;
m = i;
for (k = 0; k < 5; k++)
{
j = i / 4 * 5 + 1;
i = j;
if (j % 4 == 0)
count++;
else
break;
}
i = m;
if (count == 4)
{
System.out.println(j);
break;
}
}
}
5*x3+1=x2
5*x4+1=x3
5*x5+1=x4
5*x6+1=x5最小的x6=1
依次往上,求出x1 同楼上的方法一样
5*x3+1=x2
5*x4+1=x3
5*x5+1=x4
5*x6+1=x5
---------------------
这种递推式有问题,因为猴子每次都是把桃子分成五堆以后吃掉剩下的一个,然后再拿走一堆,剩下的四堆被后面的猴子重新分。
所以应当改成
5*x2/4+1=x1
5*x3/4+1=x2
5*x4/4+1=x3
5*x5/4+1=x4
5*x6/4+1=x5楼主想要递归的代码,其实只要写一个函数,传入x(i),返回x(i-1)就可以了。
最终的结果一定要保证x(i)都是整数,所以要放在循环里做。
*
*/
package infon.question;/**
* @author infon
* 2007-5-16
*/
public class DividePeach {
int peachNum;
int monkeyNum;
public DividePeach(int monkeyNum){
this.monkeyNum=monkeyNum;
}
public void run(){
System.out.println("第"+monkeyNum+"只猴子拿1个桃子");
recursion(1);
}
private void recursion(int peach){
peach=peach*5+1;
if(1==monkeyNum){
System.out.println("第"+monkeyNum+"只猴子拿"+peach+"个桃子");
System.out.println("共有桃子:"+(peach*5+1));
}
else{
--monkeyNum;
System.out.println("第"+monkeyNum+"只猴子拿"+peach+"个桃子");
recursion(peach);
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new DividePeach(5).run();
}
}
刚写的,还没自己算,不知道对不对运行如果
第5只猴子拿1个桃子
第4只猴子拿6个桃子
第3只猴子拿31个桃子
第2只猴子拿156个桃子
第1只猴子拿781个桃子
第1只猴子拿3906个桃子
共有桃子:19531
public static int getRest(int num) {
if ( (num - 1) % 5 != 0) {
return -1;
}
num = (num - 1) * 4 / 5;
return num;
} public static void main(String[] args) {
for (int sum = 0; true; sum++) {
int rest = sum;
for (int j = 0; j < 5; j++) {
rest = getRest(rest);
if (rest <= 0) {
break;
}
}
if (rest > 0) {
System.out.println(sum);
break;
}
}
}
}
public class Test {
private static int num = 0;
private static int getRest(int count) {
if (count == 0) {
return 1;
}
if ( (num - 1) % 5 != 0) {
return -1;
}
num = (num - 1) * 4 / 5;
return getRest(count - 1);
} public static void main(String[] args) {
int count = 5;
for (int sum = 0; true; sum++) {
num = sum;
int rest = getRest(count);
if (rest > 0) {
System.out.println(sum);
break;
}
}
}
}
int sub(int n)
{
if(n==1){
static int i=0;
do
{
i++;
}
while(i%5!=0);
//printf("*%d*",i);
return(i+1);
}
else
{
int temp;
do
{
temp=sub(n-1);
}
while(temp%4!=0);
//printf("*%d*",temp);
return(temp/4*5+1);
}
}
main()
{
int total;
total=sub(5);
printf(" %d\n",total);
} 结果是3121.
这是c的,谁改成java的看看,算法与语言没关
C语言的 我再去研究一下...
那么这个服务器有什么特点呢?
1、不需要配置XML文件:以前我们 使用J2EE服务器时都时常需要配置XML文件,而"袋*鼠*egg"则不需要,即使使用MVC结构时也是用动态页面进行逻辑控制。
2、完善的国际化支持:每个涉及到内容输出或读取的方法都重载了带有字符集的方法,这样就不需要再去编写麻烦的过滤器,只需要简单的提供当前所需要使用的字符集。
3、有条件的文件输出:BBS的web程序中经常会遇到这样一种情况,允许用户自行上传文件,而上传后的文件必须满足某些条件才能够被访问(读取、下载),这里所指的某些条件例如只有登录用户才能够访问,或者购买了BBS主题后才能访问等等。类似情况在其它web应用中也有很多,那该如何实现这种功能呢?以前我们都是自己写一个servlet进行有条件的文件输出,可是这样会很麻烦,如果要支持断点续传的需要那么自己还要写上一大段程序,要完全符合HTTP协议进行文件输出那么就更加困难了,而在"袋*鼠*egg"只需要简单的使用内置方法即可。
4、command内置对象:"袋*鼠*egg"有一个全新的内置对象command,用户可以通过此对象来查看或修改服务器当前信息,利用此对象还可以在不停服务器的情况修改服务器的某些设置,比如不中断服务的情况下软重启服务器。
5、生成静态页面:通 有些情况下,动态页面执行后的内容会长时间不变,但是访问的人却很多,如果生成静态页面那么就可以免去了执行动态文件和读取数据库的开销。"袋*鼠*egg"内置了自动的生成静态页面的功能,只需要简单编程就可以自动生成静态页面了。
5、编译及隐藏源代码:"袋*鼠*egg"可以关闭自动编译功能,只运行编译后的页面,同时提供了编译整个web应用及隐藏动态页面源代码的功能。
袋*鼠*eggweb服务器的官方网站:http://kweb.go.3322.org
* Alloc.java
*
* 五只猴子采得一堆桃,它们约定次日早起来分。半夜里,一只猴子偷偷起来,把桃均分成五堆
* 后,发现还多一个,它吃了这桃子,拿走了其中一堆。第二只猴子醒来,又把桃子均分成五堆
* 后,还是多了一个,它也吃了这个桃子,拿走了其中一堆。第三只,第四只,第五只猴子都依
* 次如此做了。问桃子数最少有多少个?
* 要求:(1)使用面向对象编程!
* (2)使用递归的方法编写!
*
* Created on 2007年5月16日, 下午8:36
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/package CSDN;/**
*
* @author perfect
*/
public class Alloc {
/** Creates a new instance of Alloc */
public static void main(String [] args){
int monkeyNum=5,peach=10000;
for(int x=2;x<peach;x++){
if(recursionFunction(x,monkeyNum)){
System.out.println("The minimum number:"+x);
break;
}
}
System.out.println("Not found!");
}
}
public static boolean recursionFunction(int peach,int monkey){
if(monkey==0)
return true;
if((peach-1)%5==0){
peach=4*(peach-1)/5;
if(recursionFunction(peach,monkey-1))
return true;
else return false;
}
else
return false;
}
/*
public Alloc() {
}
**/
}//自己写的,与WUNNAN320兄不谋而合。
* 五只猴子采得一堆桃,它们约定次日早起来分。半夜里,一只猴子偷偷起来,把桃均分成五堆后,
* 发现还多一个,它吃了这桃子,拿走了其中一堆。第二只猴子醒来,又把桃子均分成五堆后,
* 还是多了一个,它也吃了这个桃子,拿走了其中一堆。第三只,第四只,第五只猴子都依次如此做了。
* 问桃子数最少有多少个?
* 要求:(1)使用面向对象编程! (2)使用递归的方法编写!
*
* @author rainv
*
*/
public class Monkey { private int cycle=0;
public static void main(String[]args){
System.out.println(" The result is "+-1%5);
Monkey m=new Monkey();
for(int i=1;i>0;i++){
long rs=m.assign(i, 6, 0);
if(rs!=0){
System.out.println("...The min result is "+i);
break;
}
m.cycle=0;
}
}
/**
*
* @param average 可控制枚举范围的桃子总数
* @param num 猴子的只数
* @param status 状态参数,替代全局变量
* @return
*/
public long assign(long average,int num,int status){
long mid=average-1;
if(mid<=1 || (mid%num)!=0){
if(status==num)
return average;
else
return 0;
}
mid=average-mid/num-1;
status++;
// this.cycle++;
// System.out.println("...The cycle is "+this.cycle);
return this.assign(mid,num,status);
}
}//花了好长时间才想到的,温习了一下递归.
long rs=m.assign(i, 6, 0);
改为
long rs=m.assign(i, 5, 0);
5a+1=4b
5b+1=4c
5c+1=4d
5d+1=4e
5e+1=n
b,c,d分别为最后第二只至第一只猴子每堆分得的数量,n为总数。
* 五只猴子采得一堆桃,它们约定次日早起来分。半夜里,一只猴子偷偷起来,
* 把桃均分成五堆后,发现还多一个,它吃了这桃子,拿走了其中一堆。
* 第二只猴子醒来,又把桃子均分成五堆后,还是多了一个,它也吃了这个桃子,
* 拿走了其中一堆。第三只,第四只,第五只猴子都依次如此做了。
* 问桃子数最少有多少个?
* 作者: 詹惠菁
* 时间:2008-4-14
*
*/
import java.util.Scanner;public class FivePApple {
public static int Slip(int n)
{
if (n == 0)
return 1;
else
return 5*Slip(n-1) + 1;
}
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
System.out.println("Please input the number of monkey:");
int number = in.nextInt();
System.out.println("Apple is: " + Slip(number));
}
}
private static int init = 1;
private static boolean flag = true;
public static int oneCanGet(int i){
if(i == 1){
return init;
}
int remain = (oneCanGet(i-1)*5+1);
if(flag != false && remain%4 != 0){
flag = false;
}
return remain/4;
}
public static void main(String args[]) {
while(true){
int one = oneCanGet(5);
if(flag == true)
{
int total = one*5+1;
System.out.println("Total=" + total);
break;
}
else
{
flag = true;
init += 1;
}
}
}
}
using namespace std;
int main()
{
int p=1;
for(int i=0;i<5;i++)
p*=5;
p-=4;
cout<<p;
}
public class 猴子分桃2
{ public static void main(String args[])
{ float n=0;
//总数
float m1=0,m2=0,m3=0,m4=0,m5=0;
//每只猴分得的数
for(int i=0;;i++)
{ n++;
m1=(n-1)/5;//将所有的桃去掉一个 并分为五份
m2=(4*m1-1)/5;//将剩下的桃去掉一个 并分为五份
m3=(4*m2-1)/5;
m4=(4*m3-1)/5;
m5=(4*m4-1)/5;
if((n-1)%5==0&&(4*m1-1)%5==0&&(4*m2-1)%5==0&&(4*m3-1)%5==0&&(4*m4-1)%5==0)
break;
}
System.out.println(n);
System.out.println(m1);
System.out.println(m2);
System.out.println(m3);
System.out.println(m4);
System.out.println(m5);
}
}