1990年程序员下午试题[2]

程序员 责任编辑:caiqing 2008-08-30

添加老师微信

备考咨询

加我微信

摘要:试题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;

}

[1]  [2]  [3]  [4]  [5]  [6]  

更多资料
更多课程
更多真题
温馨提示:因考试政策、内容不断变化与调整,本网站提供的以上信息仅供参考,如有异议,请考生以权威部门公布的内容为准!

软考备考资料免费领取

去领取