牵着老婆满街逛

严以律己,宽以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

经典算法-半数集问题

半数集问题

«问题描述:

      给定一个自然数n,由n开始可以依次产生半数集set(n)中的数如下。

(1)       nset(n)

(2)       在n的左边加上一个自然数,但该自然数不能超过最近添加的数的一半;

(3)       按此规则进行处理,直到不能再添加自然数为止。

例如,set(6)={6,16,26,126,36,136}。半数集set(6)中有6个元素。


«
编程任务:

       对于给定的自然数n,编程计算半数集set(n)中的元素个数。


«
数据输入:

      输入数据由文件名为set*.in的文本文件提供。

每个文件只有1行,给出整数n(0<n<1000)

 

 

«结果输出:

   程序运行结束时,将计算结果输出到文件set*.out中。输出文件只有1行,给出半数集set(n)中的元素个数。

posted on 2007-09-11 21:34 杨粼波 阅读(2015) 评论(2)  编辑 收藏 引用

评论

# re: 经典算法-半数集问题 2008-05-20 00:38 wqrew

http://www.cppblog.com/tx7do/archive/2007/09/11/32025.aspx
  回复  更多评论   

# re: 经典算法-半数集问题 2010-07-28 17:25 379070532

#include<iostream>
using namespace std;
int f[1000]={0};
int set(int n)
{
int a=1;
int i;
if(f[n]>0) return f[n];
for(i=1;i<=n/2;i++)
a+=set(i);
f[n]=a;
return a;
}
int main()
{
int n;
cin>>n;
cout<<set(n)<<endl;
return 0;
}  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理