半数集问题
1、问题描述:给定一个自然数n,由n开始可以依次产生半数集set(n)中的数如下:
(1)n∈set(n);
(2)在n的左边加上一个自然数,但该自然数不能超过最近添加的数的一半;
(3)按此规则进行处理,直到不能再添加自然数为止。
2、编程任务:对于给定的自然数n,计算半数集set(n)中的元素个数。
3、数据输入:输入数据由文件名为input.txt的文本文件提供。每个文件只有1行,给出整数n(0<n<1000).
4、结果输出: 将计算结果输出到文件output.txt。输出文件只有1行,给出半数集set(n)中的元素个数。
输入文件示例 输出文件示例
input.txt output.txt
6 6
帮我编写一个用备忘录的方法做的半数集问题;或者帮我看一下以下的那个程序,程序是正确的,只需帮我注明解题思路。
因为不是我自己写的,所以看的不是很明白,请大家帮帮忙,谢谢了!
#include <fstream.h>
#include <iostream.h>
ifstream fin("input.txt");
ofstream fout("output.txt");
int Bnum(int m)
{
int i;
unsigned long count=1;
for(i=1;i<=m/2;i++)
{
count+=Bnum(i);
if(i>10 && (2*(i/10)<=i%10))
count-=Bnum(i/10);
}
return count;
}
void main()
{
int n;
cin >> n;
fout << Bnum(n)<< endl;
fin.close();
fout.close();
}