1174: 集合S
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 2 Solved: 2
[ Submit][ Status][ Web Board]
Description
S集合定义如下: 1. 1在S里面 2. 如果x在S里面,那么2*x+1和3*x+1也在S里面 3. 其他元素都不属于S 4. S集合中的元素是不重复的 现在让你寻找S集合中的第n大的元素。
Input
第一行给出T,代表有T组数据。接下来T行,每行给出一个n。( 1<=n<=50000)
Output
对于每组测试数据n,输出集合中第n大的元素
Sample Input
2 1 5
Sample Output
1 9
思路:大水,已不需要思路,直接打表。
AC代码如下:
#include<cstdio>
#include<cstring>
using namespace std;
int num[10000000];
int ans[50010];
int main()
{ int t,i,j,k;
num[1]=1;k=0;
for(i=1;k<=50000;i++)
{ if(num[i]==1)
{ ans[++k]=i;
num[2*i+1]=1;
num[3*i+1]=1;
}
}
scanf("%d",&t);
while(t--)
{ scanf("%d",&k);
printf("%d\n",ans[k]);
}
}