核反应堆问题

来源:互联网 发布:美图秀秀抠图软件 编辑:程序博客网 时间:2024/06/06 10:39


问题描述
    某核反应堆有两类事件发生:
    (1)高能质点碰击核子时,质点被吸收,放出3个高能质点和1个低能质点;
    (2)低能质点碰击核子时,质点被吸收,放出2个高能质点和1个低能质点。
    假定开始的时候(0微秒)只有一个高能质点射入核反应堆,每一微秒引起一个事件发生(对于一个事件,当前存在的所有质点都会撞击核子),试确定n微秒时高能质点和低能质点的数目。。


设计细节
    核反应堆问题可以看作最基本的迭代法求解的问题,所以几年前,有个GG很神气地对我说:“这课题我半小时就做完了!”其实他只写了一个main()和不到20行代码,输入输出只有一句话。
    如果是一道程序题,他当然算做完了,但是课程设计与编程练习最大的区别,就是课程设计一定要发扬俄罗斯战列舰的精神,用各种武器堆满甲板——正式地说,就是要充分覆盖C语言课程的所有章节,把所有学过的都用一遍,然后再来讲讲一二三四五,用了什么,怎么用的,效率、可读好不好。

    在这个问题里,一定要想到程序是“一直”运行的,所以,迭代的效率一定是不理想的,要用数组把已经计算出来的结果存起来,叫以空间换时间也行,叫打表法也行,叫动态规划法也行。
    两个细节:第一,因为存在高能质点和低能质点,所以两个一维数组就不如一个结构体数组;第二,质点个数的类型为long,数组的最大长度为17,也就是16秒以后的结果是算不出来的,这里要讨论为什么。
   
    然后,就带来一个延伸的问题:如果一定要16秒以后的数据,怎么办?到了这一步可以发现,在看似简单的核反应堆问题里,其实隐藏了一个大数相加问题。


参考设计
    这里没有考虑大数相加问题,只是解决了动态规划,并且尽量地覆盖了一下C语言的各个章节,还是那句老话,自己写得出来就不要下了。点击打开链接
 


0 0
原创粉丝点击