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;
}