版权声明:转载请注明出处 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]);
}
}