请问两个编程题目:

booming 2003-11-01 01:38:53
请问两个编程题目:
1.
设整数集合M定义如下:
1)1属于M ; 2)若x属于M,则2x+1属于M,3x+1属于M;3)没有别的整数属于M。
按递增打印前100项。
我只有做的:
void judge()
{
int k=1,count=0;
while(count<100)
{
if((k-1)%2==0||(k-1)%3==0)
{
printf("%d,",k);
count++;
if(count%10==0) printf("\n");
}
k++;
}
}

没问题吧?

2.汉诺塔非递归咋写?不是用栈模拟递归的那种非递归。有链接吗?

谢谢!
---
...全文
111 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
purerain 2003-11-03
  • 打赏
  • 举报
回复
楼主第一题的解法有问题,同意zlf_jack(风云剑客) 的解法.
booming 2003-11-02
  • 打赏
  • 举报
回复
up
3echo 2003-11-02
  • 打赏
  • 举报
回复
我认为第一题的解法有问题。
booming 2003-11-02
  • 打赏
  • 举报
回复
1. OK!

2.咋找不到汉诺塔非递归?
大家能给个链接吗?
谢了。

dengsf 2003-11-02
  • 打赏
  • 举报
回复
题目要求:
2)若x属于M,则2x+1属于M,3x+1属于M;而你的程序:
--------
if((k-1)%2==0||(k-1)%3==0)
-----------------------

违反了第 2 条规则。

举例:
比如说 5。
根据题目要求,前面的数字是 1,3,4,7,8,……。 5 不在其中。
而根据你的程序, (5-1)%2==0, 5在其中。
booming 2003-11-02
  • 打赏
  • 举报
回复
都说第一题有问题。

那么能说说问题在哪里?能举个例子吗?


levinjoe 2003-11-01
  • 打赏
  • 举报
回复
sorry,第二题没看清题意!你自己搜搜旧贴吧!
levinjoe 2003-11-01
  • 打赏
  • 举报
回复
第一题有问题:
具体可以用如下方法:
先将1放入集合:
扩展:1×2+1,1×3+1,选比1大的最小扩张数放入集合;
依次进行下去,直到第100项;
------------------------------
int a[100];
a[0]=1;
for(i=1;i<100;i++)
{
a[i]=2*a[i-1]+1;
for(j=0;j<i;j++)
{
temp=a[j]*2+1;
if(temp>a[i-1] && temp<a[i])
a[i]=temp;
temp=a[j]*3+1;
if(temp>a[i-1] && temp<a[i])
a[i]=temp;
}
}

第二题比较简单,对照非递归的中序遍历就可以编了!

33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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