有一分数序列:2/1 3/2 5/3 8/5 13/8 21/13...求出这个数列的前20项之和。
比较经典的Python解决问题
#include<stdio.h>
int* BUBBLE_ALGORITHM(int SWAP_ARRAY[],int length)
//第一个参数表示需要比较的数组,第二个参数表示数组的长度
{
int Ditias = 1;
for(;length > 0 ;length--)
{
if(Ditias == 0) return SWAP_ARRAY ;
//若没有再进行比较,说明数组已排列,退出程序
Ditias = 0;
for(int i = 0 ;i < length - 1 ;i++)
if(SWAP_ARRAY[i] > SWAP_ARRAY[i+1])
{
Ditias = 1;
int exchange = SWAP_ARRAY[i];
SWAP_ARRAY[i] = SWAP_ARRAY[i+1];
SWAP_ARRAY[i+1] = exchange;
}
}
return SWAP_ARRAY;
}
int main()
{
int cj[20] = {0};
{
for(int i=0;i<20;i++){
printf("请输入第%d位同学的成绩:\n",i+1);
fflush(stdin);
scanf("%d",&cj[i]);
}
}
int len = sizeof(cj) / sizeof(cj);
int *Temporarily = BUBBLE_ALGORITHM(cj,len);
int Total_score=0;
for(int i=0;i<20;i++){
Total_score=Total_score+Temporarily[i];
}
printf("总分:%d分\n",Total_score);
printf("平均分:%d分\n",Total_score/20);
printf("分数总览:\n");
for(int i=19;i>=0;i--){
int j=0;
printf("第%d名%d分\n",j+1,Temporarily[i]);
j++;
}
return 0;
}
a = 2
b = 1
s = 0
for i in range(20):
s += a / b
a, b = a + b, a
print(s)
提示:观察分数的分子和分母,每1项都和前2项有关系,也可检索“斐波那契数列”
# 显示分数的包
import fractions
from functools import reduce
def fab(max_num):
# 完成分子分母的生成并计算求和返回结果
# your code here
# 创建列表保存数据
_list = []
# 1、首先生成斐波那契数列
a = 1 # 注意这里a从1开始
b = 1
for i in range(max_num):
# a是分母,b是分子
a, b = b, a + b
'''
上式等同于下面3式:
temp = b
b = a + b
a = temp
'''
# print("a = ", a, "b = ", b)
# 2、生成分数
_list.append(fractions.Fraction(b, a))
# _list.append(b / a)
print("看一眼生成的列表长啥样:", _list)
# 分数要遍历才能打印...
for elm in _list:
print(elm)
assert len(_list) == max_num, "长度一致"
# 3、求前30项的和
sum_ = reduce(lambda x, y: x + y, _list)
return sum_
print("该数列的前5项和: ",fab(5))
看一眼生成的列表长啥样: [Fraction(2, 1), Fraction(3, 2), Fraction(5, 3), Fraction(8, 5), Fraction(13, 8)]
2
3/2
5/3
8/5
13/8
该数列的前5项和: 1007/120