设整数集合 M 定义如下:
(1) 1∈M ;
(2) 若 x ∈M , 则 2x+1 ∈M , 3x+1 ∈M ;
(3) 没有别的整数属于集合 M 。
编程序按递增顺序生成并输出集合 M 的前n项
输入:一个正整数n(≤300)。
输出:按递增序列输出n个属于集合M的整数,各数间以一个西文空格间隔;最后一个数后无字符。
样例1:
输入:10
输出:1 3 4 7 9 10 13 15 19 21
样例2:
输入:1
输出:1
#include<stdio.h>
#include<stdbool.h>
void paixu(int a[10000],int n);
int main(){
int a[10000],i,j,r,n;
scanf("%d",&n);
a[0]=1;
r=0;
for(i=1;i<10000;i=i+2)
{a[i]=2*a[r]+1;
a[i+1]=3*a[r]+1;
r++;
}//算出所有的数
int k,p;
k=1;
for(i=1;i<10000;i++){
p=1;
for(j=0;j<=i-1;j++){
if(a[j]==a[i])
{p=0;
break;
}}
if(p==1){
a[k]=a[i];
k++;
}}//去掉重复的数
paixu(a,n);//排序并输出
return 0;}
void paixu(int a[10000],int n){
bool flag;
int i,x;
flag=true;
while(flag)
{flag=false;
for(i=0;i<9999;i++){
if(a[i]>a[i+1]){
x=a[i];
a[i]=a[i+1];
a[i+1]=x;
flag=true;}
}}
for (i = 0; i < n; i++) {
printf("%d", a[i]);
if(i < n-1)printf(" ");
}}
为什么在学习通上不能通过?教教孩子吧!