求程序?

2.一个分数数列一个递推分数数列的构成规律为:1/2,3/5,4/7,6/10,...。设每一项的分子c与分母d(c、d为正整数),第i项的分母d与分子c存在以下关系:... 2. 一个分数数列
一个递推分数数列的构成规律为: 1/2, 3/5, 4/7, 6/10,...。设每一项的分子c与分母d(c、d为正整数),第i项的分母d与分子c存在以下关系:d=c+i;而c为与前i-1项中的所有分子分母均不相同的最小正整数。
求出该数列的第n(1<n<3000)项,并求出前n项中的最大项。
【输入】
请从标准输入设备输入 n。
【输出】
从标准输出设备输出,第一行为数列的第n项的分数值(以c/d形式输出,下同),第二行输出数列前n项中的最大项的值。
展开
 我来答
修怀芹26
2013-03-27 · TA获得超过1208个赞
知道小有建树答主
回答量:695
采纳率:75%
帮助的人:471万
展开全部
我来给你用java实现一个吧
package cn.miw.ser;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Ser {
private String bds;//表达式
private float value;//值
public Ser(int i, int j) {
bds = i+"/"+j;
value =(float)i/j;
}
@Override
public String toString() {
return "Ser [bds=" + bds + ", value=" + value + "]";
}
public static void main(String[] args) {
int n = 3000;//第n项
List<Ser> items = new ArrayList<Ser>();//保存所有数列
items.add(new Ser(1,2));//默认添加1/2
List<Integer> used = new ArrayList<Integer>();//保存所有使用过的正整数
used.add(1);used.add(2);//默认1,2已经被使用过
int c =1;int d =1;
for(int i=2;i<n;i++){
c = find(used);//查找最小未使用过的数
d = (c+i);
Ser ser = new Ser(c,d);
used.add(c);used.add(d);//将新产生的分子、分母添加进已使用的正整数
items.add(ser);
}
System.out.println(items);
System.out.println("最大值:"+getTarget(items));
}
/**
* 查找最大值
* @param items
* @return
*/
private static Ser getTarget(List<Ser> items) {
Ser target=new Ser(1, 2);
for (Ser ser : items) {
if(ser.value>target.value){
target = ser;
}
}
return target;
}
/**
* 在使用过的数中查找最小未使用的数
* @param used
* @return
*/
private static int find(List<Integer> used) {
Collections.sort(used);
for(int i =0;i<used.size();i++){
if(used.get(i)!=(i+1)) return i+1;
}
return used.get(used.size()-1)+1;
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
孟羽然
2013-03-27 · TA获得超过2977个赞
知道小有建树答主
回答量:1308
采纳率:70%
帮助的人:605万
展开全部
import sys
class Sequence:
def __init__(self):
self.index = 0
self.offset = -1;
self.seq = []
def produce(self):
self.index += 1
c = (self.offset < 0) and 1 or self.seq[self.offset] + 1
d = c + self.index
self.offset += 1
self.seq.insert(self.offset, c)
self.seq.append(d)
while (self.offset < len(self.seq) - 1 and
self.seq[self.offset] + 1 == self.seq[self.offset + 1]):
self.offset += 1
return (c, d)
if __name__ == "__main__":
n = int(sys.stdin.readline().strip())
seq = Sequence();
for i in range(1, n + 1):
print('%d/%d' % seq.produce())
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
今年可能里面
2013-03-27 · TA获得超过376个赞
知道小有建树答主
回答量:465
采纳率:100%
帮助的人:154万
展开全部
basic程序?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式