集合定義 C/C++

來源:互聯網
上載者:User

標籤:

問題描述
集合S的定義如下: (1) 1在S內; (2) 如果x在集合S內,則2x+1與3x+1也在S內; (3) 只有滿足條件(1)(2)的元素在S內. 把S中的元素按遞增順序排列,請輸出S中的第N個元素。
輸入
本題有多組測試資料。每組測試資料一行,每行一個正整數N (1 <= N <= 100000)。
輸出
對每組測試資料,在單獨的一行中輸出S的第N個元素。
輸入樣列
123456100254
輸出範例
13479104181461
思路闡述:這道題資料比較大有十萬,如果用迴圈做,肯定逾時TLE沒得商量。所以肯定得有點技巧了,比如用布爾數組標記,如果某個數滿足規則在集合中標記為true,否則標記為false。
這樣集合元素的產生和排序就都解決了。
注意:這裡有個小小的坑,如果迴圈定義為N=3000000;直接用來迴圈肯定會RE的,原因是下標越界,這個由於我也中過槍我就不說具體原因了,嘿嘿O(∩_∩)O~
好了,廢話不多說,說好的代碼來了!
 1 #include<stdio.h> 2 #define N 3000001 3 bool k[3*N]={0}; 4 int aim[N]={0}; 5 void f() 6 { 7     k[1]=true; 8     int i,j; 9     for(i=1;i<N;i++)10         if(k[i])11     {12         k[2*i+1]=true;13         k[3*i+1]=true;14     }15     j=0;16     for(i=0;i<N;i++)17     {18         if(k[i])19             aim[j++]=i;20     }21 22 }23 int main()24 {25     int n;26     f();27     while(~scanf("%d",&n))28     {29         printf("%d\n",aim[n-1]);30     }31     return 0;32 }
//如有問題,歡迎留言O(∩_∩)O~

 


集合定義 C/C++

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.