标签:输入 整数 其他 log war can 个数 div main
有多组测试,每组输入一个正整数n(n<=1000)。
输出集合A中符合题意的前n项,输出格式如样例。
1 2 3
1->end 1->2->end 1->2->5->end
思路:可以估计前1000个数可以由最小的500个数组合得到。
代码:
1 #include "cstdio" 2 #include "algorithm" 3 #include "string" 4 #include "cstring" 5 #include "queue" 6 #include "cmath" 7 #include "vector" 8 #include "map" 9 #include "stdlib.h" 10 #include "set" 11 #define mj 12 #define db double 13 #define ll long long 14 using namespace std; 15 const int N=5e3+5; 16 int a[N]; 17 bool f[N]; 18 int main() 19 { 20 //#ifdef mj 21 //freopen("data.in","r",stdin); 22 //freopen("data.out","w",stdout); 23 //#endif // mj 24 int n; 25 a[0]=1,a[1]=2; 26 memset(f,0,sizeof(f)); 27 int cnt=2; 28 for(int ii=0;ii<5;ii++){ 29 for(int i=0;i<cnt && i<500;i++ ){//i<500!! 30 for(int j=0;j<cnt && j<500;j++){//j<500!! 31 if(cnt<N-10) 32 { 33 int v=a[i]*2+a[j]*3; 34 if(v<N&&!f[v]){ 35 a[cnt++]=v; 36 f[v]=1; 37 } 38 } 39 } 40 } 41 sort(a,a+cnt); 42 } 43 while(scanf("%d",&n)==1) 44 { 45 for(int i=0;i<n-1;i++){ 46 printf("%d->",a[i]); 47 } 48 printf("%d->end\n",a[n-1]); 49 } 50 return 0; 51 52 }
标签:输入 整数 其他 log war can 个数 div main
原文地址:http://www.cnblogs.com/mj-liylho/p/7229968.html