作业帮 > 综合 > 作业

集合S的定义如下:(1) 1在S内; (2) 如果x在集合S内,则2x+1与3x+1也在S内; (3) 只有满足条件(1

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/04/28 08:23:07
集合S的定义如下:
(1) 1在S内;
(2) 如果x在集合S内,则2x+1与3x+1也在S内;
(3) 只有满足条件(1)(2)的元素在S内.
把S中的元素按递增顺序排列,请输出S中的第N个元素.
输入:本题有多组测试数据.每组测试数据一行,每行一个正整数N (1
#include <iostream>
#include <algorithm>
using namespace std;
const int MAX = 100005;
int a[MAX];
static int size = 0;
void fun(int n)
{
  if(size < MAX)
  {
    a[size++]=n;
    fun(2*n+1);
    fun(3*n+1);
  }
}
int main()
{
  size = 0;
  fun(1);
  sort(a,a + size);
  int n;
  while(cin>>n)
  {
     cout<<a[n-1]<<endl;
  }
  return 0;
}思路是这样,不过看下范围,得用大数吧.可能第50几个数就超过2^32溢出了,而且为了递归到3*n+1,size也要修改.
再问: 头文件都没学过。。可以用stdio.h写么。。。
再答: 可以的,c和c++是想通的,只是用c++方便一些。搞acm的话两个都要会,各有优缺。比如平时用cout输出简便,但遇到大数据量时就用printf