1.问题阐述:
如果有1000个苹果,有10个箱子,现要把1000个苹果放在10个箱子里面,放完后希望不管你向我要多少个苹果,我都可以整箱整箱的给你,问这个问题是否有解?
本大作业要求设计并实现一个计算机软件,支持对苹果的的存储、更新、查询、统计等操作。使得输入任何一个数据,都能自动显示取出的箱子编号及其箱子里面的苹果数目。
2.基本功能
苹果信息存储:将每箱苹果的基本信息存储在计算机中(可永久保存)。
更新:苹果箱数的更新(修改、删除、加入)。
输出:将苹果数目及箱数以较友好的格式输出(显示)。
查询:按基本信息查询苹果成员,按苹果箱数查询
3.实现要求
编写的程序在Vc集成环境下下运行;
使用相应环境下的可视化界面形式显示和操作
4.算法分析
本题是开复老师在《对话》节目中队一个清华师姐问的问题,自己也想也没想出,只是知道答案。而且网上大多只给出答案,就算有解释解释的也不是很清楚,后来在院长姐姐的指导下,才很清楚的明白了为什么,但是是这么回答我的:
可以考虑用二进制的方式,第一箱放“1”(二进制),第二箱放“10”(二进制),第三箱放“100”(二进制),依次放下去,最后剩下的放在第十箱,因为可以用:1,10,100,1000(二进制)组合十进制1~15中的任意数。
这样一来只需要在程序当中,根据输入的苹果数和箱子数,动态分配一个数组来一次存2的阶数即可。在存的过程当中,要注意以下几点
1.当苹果数大于一定值时,该问题是无解的。如10个箱子,最多只能表示
0000000001(二进制)到1111111111(个数)
2.存每个箱子中的苹果数,前期是2的0次方,1次方,2次方,但是到最后一个事不一定是2的次方,而是要用总的苹果个数减去之前的sum。
3.VC读写文件时,要注意,否则读出来的值很容易有问题,建议多用’/n’。
5.程序效果图
<