设4的数目为x,7的数目为y,
则有 4x + 7y = n
根据“中国剩余定理”
4x + 7y = n
4(x+y) + 3y = n
(x+y) + 3(x+y+y) = n
故而 { x+y=n, x+y+y=0 } 是其一组解
化简 { x+y=n, x+y+y=0 } 得 { x=2n, y=-n }
写直观些:
x = 2n-0*7, 2n-1*7, 2n-2*7, 2n-3*7, ……, 2n-i*7
y = -n+0*4, -n+1*4, -n+2*4, -n+3*4, ……, -n+i*4
根据题目要求,x与y必须是非负数,x尽可能的小。
即 2n-i*7 >= 0
化简为 i <= 2n/7
分析完毕后,代码就简单了
程序代码:
#include <stdio.h>
int main( void )
{
unsigned n;
scanf( "%u", &n );
const unsigned i = 2*n/7;
for( size_t j=0; j!=2*n-i*7; ++j )
putchar( '4' );
for( size_t j=0; j!=i*4-n; ++j )
putchar( '7' );
putchar( '\n' );
}
当然,我就是这么一分析,是不是有什么细节遗漏不管我的事,你上交作业时自己检查。
当然,上面的输出代码比较丑,可以改为
程序代码:
#include <stdio.h>
int main( void )
{
unsigned n;
scanf( "%u", &n );
const unsigned i = 2*n/7;
printf( "%.*s\n", n-i*3, "444444777777777777777777777777777777777777777777"+6-2*n+i*7 );
}