2018hdu个人排位赛:Rank LED

LED灯数字变换要改变的笔画数目。。最烦这种题了。。一个个情况都要罗列一遍。。

#include<bits/stdc++.h>
using namespace std;

int a[10] = { 6,2,5,5,4,5,6,3,7,6 };

int Cal( int x )
{
    if ( x%7==0 )
        return x/7;
    else
        return x/7+1;
}

void dfs( int now, int sum, int idx )
{
    if ( now==idx )
        return;
    if ( now!=0&&Cal(sum-6)==idx-now-1 )
    {
        printf ( "0" );
        dfs( now+1, sum-6, idx );
        return;
    }
    if ( Cal(sum-2)==idx-now-1 )
    {
        printf ( "1" );
        dfs( now+1, sum-2, idx );
        return;
    }
    if ( Cal(sum-5)==idx-now-1 )
    {
        printf ( "2" );
        dfs( now+1, sum-5, idx );
        return;
    }
    if ( Cal(sum-4)==idx-now-1 )
    {
        printf ( "4" );
        dfs( now+1, sum-4, idx );
        return;
    }
    if ( now==0&&Cal(sum-6)==idx-now-1 )
    {
        printf ( "6" );
        dfs( now+1, sum-6, idx );
        return;
    }
    if ( Cal(sum-3)==idx-now-1 )
    {
        printf ( "7" );
        dfs( now+1, sum-3, idx );
        return;
    }
    if ( Cal(sum-7)==idx-now-1 )
    {
        printf ( "8" );
        dfs( now+1, sum-7, idx );
        return;
    }
}

int main()
{
    int T ;
    scanf ( "%d", &T );
    while ( T-- )
    {
        int n;
        scanf ( "%d", &n );
        int sum = 0;
        char s[110];
        scanf ( "%s", s );
        for ( int i=0 ; i<n ; i++ )
            sum += a[s[i]-'0'];
        int idx = Cal(sum);
        dfs ( 0, sum, idx );
        printf ( "\n" );
    }
    return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值