按递增次序生成集合M的最小的100个数并输出

版权声明:转载请注明出处 https://blog.csdn.net/nanhuaibeian/article/details/88364716

1. 题目

编程,按递增次序生成集合M的最小的100个数并输出之。
M的定义为:①1∈M②X∈M,则2X+1∈M 且3X+1∈M;
显然M是一无限集合,
M={1,3,4,7,9,…}

2. 分析

观察题目,思路可以是存200或更多,找到前100最小的即可

3. 代码

#include "stdio.h"

int a[301]= {1};
//number全局变量,共存了多少个数 
int number = 1;  

void add(int value) { //按照顺序插入一个数字
	int i;
	i = number;
	//寻找插入的位置
	while(a[i-1]>value) {
		a[i] = a[i-1];
		i--;
	}
	a[i] = value;
	number++;
}

//思路就是多存点,存着排着由小到大的序,然后输出前100个数 
int main( ) {
	int index,i,j;
	
	for(index = 0; index<100; index++) { //从第一个开始插入,肯定前100个最小
		add(a[index]*2+1);
		add(a[index]*3+1);
	}
	
	for(i=0; i<100; i++)
			printf("%d\t",a[i]);
		return 0;
}

相同的题目第二次见,写出来的代码

#include "stdio.h"
#define max 300

int a[max] = {1};
int count =1;

void add(int b){
	int i;
	for(i=count-1;i>=0;i--){
		if(a[i]>b)	a[i+1] = a[i];
		else break;
	}
	a[i+1] = b;
	count++;
} 

void main(){
	int i;
	for(i=0;i<100;i++){
		add(a[i]*2+1);
		add(a[i]*3+1);
	}
	
	for(i=0;i<100;i++){
		printf("%d\t",a[i]);
	}
}

猜你喜欢

转载自blog.csdn.net/nanhuaibeian/article/details/88364716