程序员考试习题练习介绍
什么都不用说了,马上入正题(免得给人说我口水多了,哈哈)。那么今天学了些什么呢?知识当然每天都要吸收,但在乎吸收得多少。有时候一个看起来的小问题,其实足可以引发另一些问题,这一切都是靠自己,看自己怎么对待这些问题。
我们现在来做一道初程的题目,大家也不要看少初程的题喔,其实这题我在中程的试题来看到过,不过不同的地方只是把它改为用指针了。所以这里也想说说,其实中程里绝大部份的题都是围绕着指针这灵活的东西(我不把它看作"难搞",只是太"灵活",难掌握一些罢了),所以我们考中程的同道中人一定要好好掌握埃
问题如下: 阅读下列程序说明和C代码,将应填入 __(n)__ 处的字句写在答题纸的对应栏内。 [程序说明] 设一个环上有编号为 0~n-1 的 n 粒不同颜色的珠子 ( 每粒珠子颜色用字母表示,n 粒珠子的颜色由输入的字符串表示)。将环中某两粒珠子间剪开,环上珠子形成一个序列,然后按以下规则从序列中取走珠子:首先从序列左端取走所有连续同包珠子;然后从序列右端在剩下珠子中取走所有连续同色珠子,两者之和为该剪开处可取走珠子的粒数。在不同位置剪开,能取走的珠子数不尽相同。 本程序所求的是在环上哪个位置剪开,按上述规则可取走的珠子粒数最多。程序中用数组存储字符串。例如,10 粒珠子颜色对应字符串为"aaabbbadcc",从 0 号珠子前剪开,序列为 aaabbbadcc,从左端取走 3 粒 a 色珠子,从右端取走 2 粒 c 色珠子,共取走 5 粒珠子。若在 3 号珠子前剪开,即 bbbadccaaa 共可取走 6 粒珠子。 【程序】 #include <stdio.h> int count(char*s,int start,int end) { int i,c = 0,color = s[start],step = ( start > end ) ?-1; 1; for ( i = start; s[i] = color ; i += step ) { if ( step > 0 && i > end || __(1)__ ) break; __(2)__ } return c ; } void main() { char t,s[120]; int i,j,c,len,maxc,cut=0 ; printf( "请输入环上代表不同颜色珠子字符串:" ) ; scanf( "%s",s) ; len = strlen(s) ; for ( i = maxc = 0 ; i < len ; i++ ) { /*尝试不同的剪开方式*/ c = count(s,0,len-1) ; if ( c < len ) c += count( __(3)__ ); if ( c > maxc) { cut = i ; maxc = c; } /*数组s的元素循环向左移动一个位置*/ t = s[0] ; for ( j = 1; j < len ; j++ ) __(4)__ ; __(5)__ ; } printf( "在第 %d 号珠子前面剪开,可以取走制个珠子./n" , cut,maxc ) ; } 这题最重要最重要的一点就是要看懂题目,也因为这个题目比较长,所以令人感到恐惧,所以做起来也会比较紧张。所以我们千万要记住不要给题目先吓倒了,一但了解了它的是什么意思的话,好么好吧了。下面我作个图来分析一下这个程序的作用和操作。图第十八天图一 |