一个C语言程序的修改??

wo2cj 2010-06-04 06:13:19
有一个C语言程序的要求是这样的:
对于一个自然数n(n<=50),统计具有下列性质的数的个数:自然数n,在n的左边加上一个自然数,但该
自然数不能超过原数的一半;继续按此规则进行处理,直到不能再加自然数为止,例如6,16,26,126,36,136,
一共6个。
程序如下:
int s=0;
void left(int n)
{ int n1;
if(n>0)
{ s++;
for(n1=1;n1<=n/2;n1++)
left(n1);
}
}
void main()
{ int n;
clrscr();
printf("input an integet:\n");
scanf("%d",&n);
left(n);
printf("s=%d\n",s);
}

上面的程序仅统计了符合条件的数的个数。如何改进程序,输出所有的数??


...全文
115 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Julienguo 2010-06-05
  • 打赏
  • 举报
回复
你得把最初始的数字的位数记住,比如6的位是个位,一层递归得到的数乘10加6,二层递归得到的数乘100再加上层递归得到的数的10倍再加6,你看得懂C++吗?不懂的话我用C++自己编一个给你,你把分再加点
wo2cj 2010-06-05
  • 打赏
  • 举报
回复
有会做这个题的高手吗?帮忙给看看吧!
happytang 2010-06-04
  • 打赏
  • 举报
回复
求解个数比较容易
#include<stdio.h>
#include <stdlib.h>

int a[1001] = {0};
int comp(int n) //改进的递归算法
{
int ans=1;
if(a[n]>0)
return a[n];
for(int i=1;i<=n/2;i++)
ans+=comp(i);
a[n]=ans;
return ans;}

void main()
{
int n;

printf("input an integet:\n");
scanf("%d",&n);
a[1]=1;
printf("count is %d \n\r",comp(n));
system("pause");
}
qq120848369 2010-06-04
  • 打赏
  • 举报
回复
没看懂楼主在干吗.
周靖峰 2010-06-04
  • 打赏
  • 举报
回复
难道是要用树做?
lefttime 2010-06-04
  • 打赏
  • 举报
回复
这是个排列组合的问题, 有必要用递归吗?!

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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