一个农场有N斤草,一只羊第一天吃了一半的草,第二天又吃了这些草得一半多一斤
   ,第三天又吃了这些草得一半多两斤,到N天的时候,农场的草只剩下一斤。
1.请问这只羊吃了多少天,才把这N斤的草吃剩一斤?
2.计算这N斤的草有多少斤?

解决方案 »

  1.   

    for (int day = N; day > 0; --day) {
        sum = sum * 2 + 1;
    }
      

  2.   


    int sum=1; //总量
    int number=n-1; //多余吃掉的void fun (int sum , int number ,int n)
    {
      if(number==0)
      {
         System.out.println("");
         break;
       }
       else
       {
          sum=sum*2 + number;
          number=number-1;
          n--;
          fun(sum,number,n);
        }
    }
    未知量较多,这只是个思路,具体的求解,暂时做不到
      

  3.   


    int fun (int n)
    {
      if(n==0)
      {
         return 1;
       }
       else
       {
          return (fun(n-1)+n-1)*2;
        }
    }最后的返回值就是你要的草的斤数,你可以更改n的值来测试N的值
      

  4.   

    反向看的话 最后一天省的草得数量为 2 * (N + 1) N从0开始计算 所以 只要>=3理论都是可以有值的 public class Test1 {
     
        public static int getSUM(int day,int sumday){
         if(day == sumday ){
         return 2 * (day + 1);
         }else{
         return (getSUM(day + 1,sumday) + day  ) * 2;
         }
        }
    /**
     *@param args
     */
    public static void main(String[] args) {
    int maxdays = 20;//考虑到最大的整数为2^31 - 1 所以将值设小一点
    for(int i = 3;i < maxdays;i++){
    System.out.println((i + 1)+"天吃完:草得总斤数:"+getSUM(0,i));
    }
          
    }}
    4天吃完:草得总斤数:84
    5天吃完:草得总斤数:228
    6天吃完:草得总斤数:580
    7天吃完:草得总斤数:1412
    8天吃完:草得总斤数:3332
    9天吃完:草得总斤数:7684
    10天吃完:草得总斤数:17412
    11天吃完:草得总斤数:38916
    12天吃完:草得总斤数:86020
    13天吃完:草得总斤数:188420
    14天吃完:草得总斤数:409604
    15天吃完:草得总斤数:884740
    16天吃完:草得总斤数:1900548
    17天吃完:草得总斤数:4063236
    18天吃完:草得总斤数:8650756
    19天吃完:草得总斤数:18350084
    20天吃完:草得总斤数:38797316
      

  5.   

    Sn = 1/2Sn-1 - (n-1)   n > 1
    则 Sn-1 = 2*(Sn + n -1)code:
    int N = 1;
    int day = 10;
    for(int i = day; i>0; i--){
        System.out.printf("第%d天剩下草的重量是:\t%d\n",i,N);
        // i = 1时,求出的前一天的草的重量N,就是总重量
        N = 2*(N + i -1);
    }
    System.out.printf("总共有草:\t%d斤\n" , N);
      

  6.   

    1和2是两个问题,都可以用递归求解,范例+Demo如下:
    public class EatGrass { // 问题1:给定草的斤数n,求解天数
    public static int getDays(int n, int... x) throws Exception {
    if (n==1) return 0;
    if (n<1 || n%2==1) throw new Exception("草的斤数不合法,无解");
    int p = x.length==0?0:x[0];
    return getDays(n/2-p, p+1)+1; 
    }

    // 问题2:给定天数d,求解草的斤数
    public static int getGrass(int d, int... x) {
    if (d<0) return -1; //不正确的输入天数
    if (d==0) return 1;
    else {
    int p=x.length==0?0:x[0];
    return (getGrass(d-1, p+1) + p)*2;
    }
    }

    public static void main(String[] args) {
    for (int i=0; i<=10; i++) 
    System.out.println("给定天数" + i + ", 草斤数=" + getGrass(i));
    System.out.println(); for (int i=0; i<40; i++) {
    try {
    System.out.println("给定草斤数" + i + ",天数= " + getDays(i));
    } catch (Exception e) {
    System.out.println("给定草斤数" + i + ",没有合适的天数");
    }
    }
    }}
      

  7.   


    private final static int datecount = 12;
    public static void main(String args[]) throws ParseException  {
    eatTheGrass(1);
    }

    private static int eatTheGrass(int date){

    if(date == datecount){
    System.out.println("第"+date+"天有草"+1+"斤");
    return 1;
    }else{
    int n = (eatTheGrass(date+1)+ date-1)*2;
    System.out.println("第"+date+"天有草"+n+"斤");
    return n;
    }
    }
    第12天有草1斤
    第11天有草22斤
    第10天有草62斤
    第9天有草140斤
    第8天有草294斤
    第7天有草600斤
    第6天有草1210斤
    第5天有草2428斤
    第4天有草4862斤
    第3天有草9728斤
    第2天有草19458斤
    第1天有草38916斤
      

  8.   


    <script type="text/javascript">
    /*
    一个农场有N斤草,一只羊第一天吃了一半的草,第二天又吃了这些草得一半多一斤
      ,第三天又吃了这些草得一半多两斤,到N天的时候,农场的草只剩下一斤。
    1.请问这只羊吃了多少天,才把这N斤的草吃剩一斤?
    2.计算这N斤的草有多少斤?
    *///农场的草
    var n = 0;
    //羊吃草的天数
    var day = 0;
    for(n=3;n<1000;n++) {
    eat(n);
    }

    function eat(cao) {
    if(cao == 1) {
    alert(n+":"+day); //多少斤草和吃啦多少天
    day = 0;
    return ;
    }
    if(cao<1) {
    //p1.innerText+=".";
    day = 0;
    return;
    }
    day++;
    //alert(cao);
    cao =cao/2-(day-1); //剩下的草
    eat(cao);
    }
    </script>