黑马程序员技术交流社区
标题:
难题
[打印本页]
作者:
2015竹林风
时间:
2015-11-7 14:21
标题:
难题
有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
这道题的思想是什么,怎么做呢?
作者:
黑夜中那颗星
时间:
2015-11-7 16:05
public class Test {
public static void main(String[] args) {
ArrayList<Integer> al = new ArrayList<Integer>();
for(int x = 1;x<=21;x++){
if(x<3){
al.add(x);
}
else
al.add((al.get(x-3)+al.get(x-2)));
}
int sum = 0;
for(int x = 1;x<al.size();x++){
int i = al.get(x);
int n = al.get(x-1);
sum+=i/n;
System.out.println(i+"/"+n+"="+(i/n));
}
System.out.println(sum);
}
}
复制代码
作者:
森然
时间:
2015-11-7 19:13
代码能给全吗
作者:
小肥啾
时间:
2015-11-7 20:18
看除数和被除数 都是有规律的 可以作为两个数组,这个序列就是两个数组同样索引相除,就是这样了
作者:
小肥啾
时间:
2015-11-7 22:57
import java.util.Scanner;
public class Array_sum_double {
/**
* 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
*/
public static void main(String[] args) {
System.out.println("请输入要求出多少个数的和:");
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
System.out.print("除数为:\t\t");
print_int(getNum_cs(num));
System.out.println();
System.out.print("被除数为:\t");
print_int(getNum_bcs(num));
System.out.println();
System.out.print("数列为:\t\t");
String[] str = num(num);
print_String(str);
System.out.println();
System.out.print("和为:\t\t");
System.out.println(sum(num));
}
// 求除数和被除数的规律是 (1)(1)2 3 5 8 13 21……
// 除数从2(索引2-第三个数)开始 被除数从1(索引1-第二个数)
public static int getNum(int num) {
if (num == 1) {
return 1;
} else if (num == 2) {
return 1;
} else if (num > 2) {
return (getNum(num - 1) + getNum(num - 2));
} else {
return 0;
}
}
// 求除数从索引2(第三个数) 开始
public static int[] getNum_cs(int num) {
int[] arr = new int[num];
for (int i = 1; i <= num + 2; i++) { // 因为有两个数字 用不上
// 要往后跳两个,保证两个索引对应的数字刚好是除数和被除数
if (i >= 3) {
arr[i - 3] = getNum(i);
}
}
return arr;
}
// 求被除数从索引1 (第二个数) 开始
public static int[] getNum_bcs(int num) {
int[] arr = new int[num];
for (int i = 1; i <= num + 1; i++) { // 因为有一个数字 用不上
// 要往后跳一个,保证两个索引对应的数字刚好是除数和被除数
if (i >= 2) {
arr[i - 2] = getNum(i);;
}
}
return arr;
}
//算出目标数组的结果
public static double sum(int count) {
int[] cs = getNum_cs(count);
int[] bcs = getNum_bcs(count);
double db = 0;
for (int i = 0; i < count; i++) {
double d_cs = cs
;
double d_bcs = bcs
;
db += d_cs / d_bcs;
}
return db;
}
// 求出目标数结果的显示序列
public static String[] num(int count) {
int[] cs = getNum_cs(count);
int[] bcs = getNum_bcs(count);
String[] str = new String[count];
for (int i = 0; i < count; i++) {
str
= cs
+ "/" + bcs
;
}
return str;
}
//数组整数打印
public static void print_int(int[] arr) {
System.out.print("[");
for (int i = 0; i < arr.length; i++) {
if (i < arr.length - 1) {
System.out.print(arr
+ "\t");
}else {
System.out.print(arr
);
}
}
System.out.print("]");
}
//打印字符串数组
public static void print_String(String[] str) {
//System.out.print("[");
for (int i = 0; i < str.length; i++) {
if (i < str.length - 1) {
System.out.print(str
+ "\t");
}else {
System.out.print(str
);
}
}
//System.out.print("]");
}
}
作者:
黑夜中那颗星
时间:
2015-11-7 23:09
森然 发表于 2015-11-7 19:13
代码能给全吗
导包没有复制进去,在最上面加上 import java.util.*;
作者:
小肥啾
时间:
2015-11-7 23:27
黑夜中那颗星 发表于 2015-11-7 16:05
这个溜 都不用数组在来麻烦了
作者:
ash午夜阳光
时间:
2015-11-7 23:47
本帖最后由 ash午夜阳光 于 2015-11-8 08:00 编辑
package generic;
public class XXXXX {
public static void main(String[] args) {
for (int i = 1; i <= 20; i++) {
System.out.print(getFenZi(i)+" ");
}
System.out.println();
for (int i = 1; i <= 20; i++) {
System.out.print(getFenMu(i)+" ");
}
System.out.print(getSum(20));
}
public static int getSum(int n) {
int sum = 0;
for (int i = 1; i <= n; i++) {
sum += getFenZi(i) / getFenMu(i);
}
return sum;
}
public static int getFenMu(int n) {
if (n == -1) {
return 0;
} else if (n == 0) {
return 1;
} else
return getFenMu(n - 1) + getFenMu(n - 2);
}
public static int getFenZi(int n){
if (n == -1) {
return 1;
} else if (n == 0) {
return 1;
} else
return getFenZi(n - 1) + getFenZi(n - 2);
}
}
作者:
2015竹林风
时间:
2015-11-8 18:37
黑夜中那颗星 发表于 2015-11-7 16:05
谢谢,非常感谢
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2