试题
按递增顺序产生序列M中最小的 n 个数(自然数n由键盘输入)。
序列M的定义如下:
1)数1属于M;
2)如果k属于M,则2k+1,3k+1也属于M;
3)除1)、2)之外,再无数属于M。
请大虾们给出能运行的C语言程序,别的语言的看不懂,不胜感激!
#include<stdio.h>
int main()
{
long data[1000];
int n,i,j=1,k=1;
scanf("%d",&n);
data[0]=1;
for(i=1;i<n;i++)
{
if(2*j+1<3*k+1)
{
data[i]=2*j+1;
j++;
}
else
{
if(2*j+1>3*k+1)
{
data[i]=3*k+1;
k++;
}
else //处理相等,这一步很重要。
{
data[i]=3*k+1;
k++;
j++;
}
}
}
for(int i=0;i<n;i++)
{
printf("%-5ld",data[i]);
}
printf("\n");
return 0;
}
//不知道可以吗.
#include<stdio.h>
int main()
{
long data[1000];
int n,i,j=1,k=1;
scanf("%d",&n);
data[0]=1;
for(i=1;i<n;i++)
{
if(2*j+1<3*k+1)
{
data[i]=2*j+1;
j++;
}
else
{
if(2*j+1>3*k+1)
{
data[i]=3*k+1;
k++;
}
else //处理相等,这一步很重要。
{
data[i]=3*k+1;
k++;
j++;
}
}
}
for(int i=0;i<n;i++)/*这里的int 我没用,编译才通过*/
{
printf("%-5ld",data[i]);
}
printf("\n");
return 0;
}