半数集问题

ninghui45 2008-11-19 08:14:15
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();
}
...全文
1041 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixiaoshashou 2009-10-11
  • 打赏
  • 举报
回复
你的意图是什么啊。是要别人帮你解释还是帮你改。
wanchangjiu123 2008-12-13
  • 打赏
  • 举报
回复
我认识你
攸县的
ninghui45 2008-11-19
  • 打赏
  • 举报
回复
备忘录的思想是这样的。
int MemoizedMatrixChain (int n,int * * m,int * * s)
{
for (int i=1;i<=n;i++)
for (int j=i;j<=n;j++) m[i][j]=0;
return LookupChain (l,n);
}
int LookupChain (int i,int j)
{
if(m[i][j]>0) return m[i][j];
if(i==j) return 0;
int u=LookupChain(i,i)+LookupChain(i+1,j)+p[i-1]*p[i]*p[j];
s[i][j]=i;
for (int k=i+1;k<j;k++) {
int t=LookupChain(i,k)+LookupChain(k+1,j)+p[i-1]*p[k]*p[j];
if (t<u) {u=t;s[i][j]=k;}
}
m[i][j]=u;
return u;
}
ninghui45 2008-11-19
  • 打赏
  • 举报
回复
不是美女,也有烦恼啊!
ninghui45 2008-11-19
  • 打赏
  • 举报
回复
谢谢,呵呵。
xqls_xqls 2008-11-19
  • 打赏
  • 举报
回复
例如,set(6) = {6,16,26,126,36,136}。半数集set(6)中有6个元素。
xqls_xqls 2008-11-19
  • 打赏
  • 举报
回复
大姐,我来帮你顶帖,不要让它沉底了。
怎么还没有人来帮忙呢、?
太乙 2008-11-19
  • 打赏
  • 举报
回复
lz是美女?

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧