摘要:试题3[程序说明]函数vr6174是对卡布列克运算的验证程序。所谓卡布列克运算,是指任意一个四位数,只要它们各个位上的数字不全相同,就有这样的规律:(1)把组成这个四位数的四个数字由大到小排列,形成由这四个数字构成的最大的四位数;(2)把组成这个四位数的四个数字由小到大排列,形成由这四个数字构成的最小的四位
试题 3
[程序说明]
函数 vr6174 是对卡布列克运算的验证程序。
所谓卡布列克运算,是指任意一个四位数,只要它们各个位上的数字不全相同,就有这样的规律:
(1)把组成这个四位数的四个数字由大到小排列,形成由这四个数字构成的最大的四位数;
(2)把组成这个四位数的四个数字由小到大排列,形成由这四个数字构成的最小的四位数( 如果四个数字中含有 0,则此数不足四位 );
(3)求出以上两数之差,得到一个新的四位数。
重复以上过程,总能得到最后的结果是 6174。
如果当 n=5346 时调用 vr6174(n),便会输出以下结果:
6543-3456=3087 8730-378=8352 8532-2358=6174
函数 vr6174 采用了递归算法,并调用 parse_sort 和 max_min 函数。其中 parse_sort 函数把所给的四位数分解为四个一位数字,并将其从小到大排序,放入数组 each;max_min 函数根据 each 的值形成所要求的最大四位数和最小四位数。
[程序]
vr6147( num )
int num;
{
inteach[4],max,min;
if ( num!=6174&&num )
{
parse_sort( num,each );
max_min( __①__);
num = max_min;
printf( "%d-%d=%d",max,min,num ),
vr6174( nurn );
}
else printf( "\n" );
return;
}
parse_sort( num,each )
int num,*each;
{
int i,*j,*k,temp;
for ( i;0;i<4;i++ )
{
j=each+3-i;
__②__;
hum=num/10;
}
for ( i=0;i<3;i++ )
for ( j-each,k=each+1;;j<each+3-i;__③__ )
{
if ( *j>*k )
{ temp=*j; *j=*k; *k=temp;}
}
retrun;
}
max_min( each,max,min )
int *each,*max,*min;
{
int *j;
min=0
for ( i;each;i<each+4;i++ )
*min=__④__;
*max=0;
for ( i;each+3;i>=each;i-- )
*max=__⑤__;
return;
}
软考备考资料免费领取
去领取