集合问题

来源:互联网 发布:巴斯夫新材料公司 知乎 编辑:程序博客网 时间:2024/05/16 19:33

【培训试题】集合问题(easy)

 

Time Limit:1000MS  Memory Limit:65536K
Total Submit:1035 Accepted:324

Description

  集合的前N个元素:编一个程序,按递增次序生成集合M的最小的N个数,M的定义如下:
(1)数1属于M;
(2)如果X属于M,则Y=2*X+1和Z=3*x+1也属于M;
(3)此外再没有别的数属于M。

Input

n(b.in) (1≤n≤100)

Output

生成集合M的最小的N个数(b.out)

Sample Input

4

Sample Output

1 3 4 7


【解析】

队列结构的基础习题,一开始想复杂了。
大致思路是用两个队列分别存放每次计算出来的y和z的值。每次更新时,比较两个队列头结点的值,选择更新较小的一个,把对应的y和z值储存。一边更新一边输出即可。

程序如下:

var        y,z:array[1..1000] of longint;        n,hdi,hdj,t,count:longint;function min(a,b:longint):longint;begin        if a<b then exit(a);        exit(b);end;begin        readln(n);        t:=1;        y[1]:=1;        z[1]:=1;        hdi:=1;        hdj:=1;        count:=1;        while count<=n do                begin                        if count=n then                                begin                                        writeln(min(y[hdi],z[hdj]));                                        halt;                                end                        else                                write(min(y[hdi],z[hdj]),' ');                        if y[hdi]<z[hdj] then                                begin                                        inc(t);                                        y[t]:=2*y[hdi]+1;                                        z[t]:=3*y[hdi]+1;                                        inc(hdi);                                end                        else                                begin                                        inc(t);                                        y[t]:=2*z[hdj]+1;                                        z[t]:=3*z[hdj]+1;                                        if y[hdi]=z[hdj] then                                                begin                                                        inc(hdi);                                                        inc(hdj);                                                end                                        else                                                inc(hdj);                                end;                        inc(count);                end;end.


原创粉丝点击