您的位置:首页 > 其它

poj 1906

2011-03-06 20:57 176 查看
/*Three powers
Time Limit: 1000MS Memory Limit: 30000K
Total
Submissions: 3653 Accepted: 1576
Description

Consider the set of all non-negative integer powers of 3.
S = { 1, 3, 9,
27, 81, ... }

Consider the sequence of all subsets of S ordered by the value of the sum of
their elements. The question is simple: find the set at the n-th position in the
sequence and print it in increasing order of its elements.
Input

Each line of input contains a number n, which is a positive integer with no
more than 19 digits. The last line of input contains 0 and it should not be
processed.
Output

For each line of input, output a single line displaying the n-th set as
described above, in the format used in the sample output.
Sample Input

1
7
14
783
1125900981634049
0
Sample Output

{ }
{ 3, 9 }
{ 1, 9, 27 }
{ 3, 9, 27, 6561, 19683 }
{ 59049,
3486784401, 205891132094649, 717897987691852588770249 }
Source

Waterloo local 2004.06.12

分析:数的进制问题,多多益善,找规律吧

*/
#include <cstdlib>
#include <iostream>
using namespace std;
/*
 *
 */
char str[65][32] = {"1", "3", "9", "27", "81", "243", "729","2187", "6561",
   "19683", "59049", "177147", "531441","1594323", "4782969", "14348907", 
   "43046721", "129140163","387420489", "1162261467", "3486784401",
   "10460353203","31381059609", "94143178827", "282429536481", "847288609443",
   "2541865828329", "7625597484987", "22876792454961","68630377364883",
   "205891132094649", "617673396283947","1853020188851841", "5559060566555523",
   "16677181699666569", "50031545098999707", "150094635296999121",
   "450283905890997363","1350851717672992089", "4052555153018976267", 
   "12157665459056928801","36472996377170786403", "109418989131512359209",
   "328256967394537077627", "984770902183611232881","2954312706550833698643", 
   "8862938119652501095929","26588814358957503287787",
   "79766443076872509863361","239299329230617529590083", 
   "717897987691852588770249","2153693963075557766310747", 
   "6461081889226673298932241","19383245667680019896796723", 
   "58149737003040059690390169","174449211009120179071170507",
   "523347633027360537213511521","1570042899082081611640534563", 
   "4710128697246244834921603689","14130386091738734504764811067", 
   "42391158275216203514294433201","127173474825648610542883299603",
   "381520424476945831628649898809","1144561273430837494885949696427",
   "3433683820292512484657849089281"};
int main(int argc, char** argv)
{
    int i,bol;
    long long n;
    while(cin>>n&&n)
    {
        if(n==1){cout<<"{ }"<<endl;;continue;}
        bol=i=0; --n;
        while(n)
        {
            if(n%2)
                if(bol==1)cout<<", "<<str[i];
                else {cout<<"{ "<<str[i];bol=1;}
            ++i;
            n/=2;
        }
        cout<<" }"<<endl;
    }
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: