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);
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 + ",没有合适的天数"); } } }}
private final static int datecount = 12; public static void main(String args[]) throws ParseException { eatTheGrass(1); }
sum = sum * 2 + 1;
}
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);
}
}
未知量较多,这只是个思路,具体的求解,暂时做不到
int fun (int n)
{
if(n==0)
{
return 1;
}
else
{
return (fun(n-1)+n-1)*2;
}
}最后的返回值就是你要的草的斤数,你可以更改n的值来测试N的值
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
则 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);
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 + ",没有合适的天数");
}
}
}}
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斤
<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>