hdu 5676ztr loves lucky numbers

排列组合,打表法。今天学了一个新的函数:next_permutation(a,a+n).具体用法可以百度,大概就是把a全排列,然后返回1(排列成功)或者0(已经是最大)


#include<stdio.h>
#include<string.h>
#include<iostream>
#include<limits.h>
#include<math.h>
#include<algorithm>
#include<ctype.h>
using namespace std;
char temp[20];
char temp_bijiao[20];
int input[20];
int a[30];
int main(void)
{
    int t,length;
    long long x,bijiao;
    cin>>t;
    while(t--)
    {
        scanf("%I64d",&x);

        sprintf(temp,"%I64d",x);
        length=strlen(temp);

        if(length%2==1)
        {
            for(int i=1;i<=(length+1)/2;i++)
                printf("4");
            for(int i=1;i<=(length+1)/2;i++)
                printf("7");
            printf("\n");
        }
        else
        {
            int hehe=0;
            bijiao=0;
            for(int i=0;i<length/2;i++)
                a[i]=4;
            for(int i=length/2;i<length;i++)
                a[i]=7;
            /*
            for(int i=0;i<length;i++)
                printf("%d",a[i]);
            printf("\n");
            */
            for(int i=0;i<length;i++)
                temp_bijiao[i]=a[i]+'0';
            temp_bijiao[length]='\0';
            if(strcmp(temp,temp_bijiao)<=0)
            {
                printf("%s\n",temp_bijiao);
                hehe=1;
            }
            if(hehe==0)
                while(next_permutation(a,a+length))
                {
                    for(int i=0;i<length;i++)
                        temp_bijiao[i]=a[i]+'0';
                    temp_bijiao[length]='\0';
                    if(strcmp(temp,temp_bijiao)<=0)
                    {
                        printf("%s\n",temp_bijiao);
                        hehe=1;
                        break;
                    }
                }
            if(hehe==0)
            {
                for(int i=0;i<length/2+1;i++)
                printf("4");
                for(int i=length/2+1;i<length+2;i++)
                printf("7");
                printf("\n");
            }
        }

    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值