147

147

 

Time Limit:   1000MS       Memory Limit:   65535KB
Submissions:   76       Accepted:   24

 

Description

春节刚刚过,大家都是怎么过的呢?对江鸟而言,当然每天都是在打麻将中度过,他特别喜欢所谓的“通挂”,什么147,258,369。只要是遇到上述牌,他就会很高兴。现在他提出一个问题:如果只利用数字1,4,7 组成一些数,那么你能很快求出第K(1<=K<=10000)大数吗?如前几个数将会是:1、4、7、11、14、、、

 

 

Input

输入一个如上所描述的整数K,(1<=K<=10000),多组输入。

 

 

Output

输出需要的第K大数。

 

 

Sample Input

 

1
3
4

 

Sample Output

 

1
7
11

 

 

解析:

这道题看上去不那么简单,其实仔细就会发现,num的值是:1~3时,结果为1位数;4~9时,结果为2位数;10~27时,结果为3位数·····那么根据num的值就容易确定结果的位数。并且会发现结果每位数上1、4、7都是循环有序出现的,那么num%3就能得到这位上的数值,num/3就可以往前推,这样迭代下去就行了 

 

# include<stdio.h>
int dg[3]={7,1,4};
int t[1005];
int main()
{
    int num,sum,sign;
    int i,cnt;
    while(scanf("%d",&num)!=EOF)
    {
        sign=1;
        sum=0;
        cnt=0;
        while(sum<num)//计算出位数cnt
        {
            sign*=3;
            sum+=sign;
            cnt++;
        }
        for(i=cnt-1;i>=0;i--)//由于只有三个数,并循环有序出现,因此要可以如此赋值
        {
            t[i]=dg[num%3];
            if(num%3)
                num=num/3;
            else num=num/3-1;
        }
        for(i=0;i<cnt;i++)
        printf("%d",t[i]);
        printf("\n");
    }
    return 0;
}

 

 

 

posted on 2013-03-10 15:29  即为将军  阅读(523)  评论(0)    收藏  举报

导航