【求助】编写一个程序,按递增顺序生成集合M(数1属于M,如果x属于M,则y=2x+1和z=3x+1也属于M)的最小的100个数

cupid198436 2005-03-30 12:39:57
编写一个程序,按递增顺序生成集合M的最小的100个数,M的定义如下:
(1)数1属于M
(2)如果x属于M,则y=2x+1和z=3x+1也属于M
(3)再没有别的数属于M
...全文
1045 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
cupid198436 2005-03-30
  • 打赏
  • 举报
回复
xxxdg(学习中) said;
听起来这个题目so easy
================================================================================
是有些简单,但是我觉得这个程序给我一些新的东西,而不像其他有些程序,只是重复
xxxdg 2005-03-30
  • 打赏
  • 举报
回复
听起来这个题目so easy
sanyou98 2005-03-30
  • 打赏
  • 举报
回复
up
zengwujun 2005-03-30
  • 打赏
  • 举报
回复
看错人了,healer_kx那个是模板
zengwujun 2005-03-30
  • 打赏
  • 举报
回复
楼主改的很好,呵呵
zengwujun 2005-03-30
  • 打赏
  • 举报
回复
他那个算法是错的,结果差远了
cupid198436 2005-03-30
  • 打赏
  • 举报
回复
healer_kx(天降甘草)
呵呵,你是用C++写的,我还看不懂啊~~~
cupid198436 2005-03-30
  • 打赏
  • 举报
回复
kedengfeng(五德漫)
你的代码我没有看懂,能具体说一下吗?
cupid198436 2005-03-30
  • 打赏
  • 举报
回复 2
zengwujun(月之海)
你的思路不错,多谢了
============================================
我改了一下,具体代码如下:
#include<stdio.h>
void main()
{ int j,M[100],yi=0,zi=0,n,y=3,z=4;
M[0]=1;
for(j=1;j<100;j++){
if(y<z){
M[j]=y;
y=2*M[++yi]+1;
}
else if(y==z){
M[j]=y;
y=2*M[++yi]+1;
z=3*M[++zi]+1;
}
else{
M[j]=z;
z=3*M[++zi]+1;
}
}
printf("集合M按递增顺序的前100个元素如下:");
for(j=0;j<100;j++){
if(j%10==0)
printf("\n");
printf("%5d",M[j]);
}
printf("\n");
}
sharper_eel 2005-03-30
  • 打赏
  • 举报
回复

没看明白,好象不能实现吧,因为如果M集合中第一百个数是X,那么y=2x+1和z=3x+1已经超出M集合的范围了。我没看明白你的意思。
zengwujun 2005-03-30
  • 打赏
  • 举报
回复
#include <stdio.h>
#define N 100

void main()
{
int left[N],right[N],data[N];//left存2x+1,right存3x+1
int dLen=0;//data长度
int lLen=0,rLen=0;//left和right长度
int lbegin=0,rbegin=0;//参与比较大小的letf,right索引
int x=1;//用来产生2x+1和3x+1的数
data[dLen++]=x;//1进

while(dLen<100)
{
//产生2x+1和3x+1
left[lLen++]=2*x+1;
right[rLen++]=3*x+1;

//比较索引,产生x
if(left[lbegin]<=right[rbegin])
{
if(left[lbegin]==right[rbegin])rbegin++;
x=left[lbegin];
lbegin++;
}
else
{
x=right[rbegin];
rbegin++;
}

data[dLen++]=x;
}

for(int i=0;i<dLen;++i)
{
printf("%5d",data[i]);
if(i%5==4)printf("\n");
}
}
healer_kx 2005-03-30
  • 打赏
  • 举报
回复
template<int i>
class M
{
enum {s = M<i-1>::s , s1 = 2 * s + 1, s2 = 3 * s + 1}
};

template<>
class M<1>
{
enum {s = 1; s1 = 3, s2 = 4}
}

也不知道我学得泛型这么写对不对...
kedengfeng 2005-03-30
  • 打赏
  • 举报
回复
int c[100];
c[0] = 1;
index = 0;
count = 1;
while(index<100)
{
int n,p;

p=count-1; if(p>99) p = 99;
n = c[index]*2+1; while(c[p]>n) c[p+1]=c[p--];c[p] = n;

p=count; if(p>99) p = 99;
n = c[index]*3+1; while(c[p]>n) c[p+1]=c[p--]; c[p] = n;

count = count+2;
index ++ ;
}

69,374

社区成员

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

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