集合问题
来源:互联网 发布:巴斯夫新材料公司 知乎 编辑:程序博客网 时间: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.
- 集合问题
- 集合问题
- 集合问题
- 问题集合
- 集合问题
- 问题集合
- 问题集合
- 集合问题
- 集合问题
- JAVA问题集合
- JAVA问题集合2
- 面试问题集合
- JAVA问题集合
- JAVA问题集合
- JAVA问题集合
- JavaScript问题集合
- .Net问题集合
- Mysql问题集合
- ACE学习之单体模式(Singleton)
- Oracle左右全连接总结
- 不得不说的故事:STL内存管理
- 观察者模式
- linux下superblock的计数方法
- 集合问题
- javascript 学习笔记3
- ACE 过程中记录的一些笔记
- 回文的判断
- 哈希聚簇读取(Hash Cluster Access)[摘]
- ace线程控制
- ACE_Task
- 什么叫逻辑移位和算术移位
- ace线程管理