【编程题算法总结】C语言程序设计

【66题】总结求一个数的因数的方法:设这个数为n,从1到n/2,逐个去试,它小于等于这个数的一半;

【67题】 递归反映栈的先进后出思想,先输入的后输出。

【拓展】因为涉及到输入输出,同时反映出相关知识点:对于输入端,无论你输入多少字符,都暂时放入内存中,然后计算机再从内存中逐个读回来,当发现你输入的字符数不够的时候再要求你继续输入。

【74题】移动数组的一个方法是利用另一个数组进行移动;其次,倒数第i个元素的数组下标为n-i,其中n是数组元素的个数,i范围从1到n。

【拓展】回忆之前计算数组中元素的个数为下标值之差加一,例如求下标为0到下标为2的数组元素个数为2-0+1=3(个),分别为r[0],r[1],r[2]。

【75题】三天打渔两天晒网问题,规律为距离下一次打渔时间为5天,下一次晒网时间也为五天,但是一次循环的1,2,3天为打渔,4,5天为晒网,从而可以用除留余数法来判断处于循环的哪一部分。设距离循环初始日期(初始位置)的天数为n,n%5若在1-3之间则为打渔,若在4-5之间则为晒网。

【77题】文件读写方式:在循环语句while(feof(fp))之前先写一句ch = fgec(fp)的好处是避免读入尾标志;exit(0)函数调用的是库;采用puts()方式输出字符数组时,应确保字符数组有结束符'\0',不然会输出乱码。(这些问题详见C语言改错题)

【83,88,89题】函数题:列方程,确定变量范围,[用已知变量确定其它变量的值],判断条件。

【注意点】88,89错误原因,循环变量的范围没有囊括1,警示你,对于自然数要从0开始考虑。

【85题】迭代法:

(1)迭代条件涉及新旧值的比较(不知道旧值的情况):循环之外赋初值,做do{}while();循环,先把新值赋给旧值,再用旧值计算新值,最后判断。

(2)否则:可以做while(){};先判断,如果超过限差就继续迭代,且新值和旧值只需要一个变量即可。(题源:T78思考题(1))

【86题】枚举法列举元素排列组合,要列举几个元素进行排列就用几个循环(第一层循环元素就可以通过后面几层循环全部列举出来),最后一层判断三个数不相等的条件:i != j && j != k && i != k;

【补充(与此题无关)】对于每5个数打印一行的问题:用一个计数器count = 0;每打印一个数,就count++,然后判断count%5是否为0,如果为0,说明已经打印过5个数了,该换行了。

【91题】 问题本质考的是排列组合,从哪些数能组成数字的哪些位数为出发点思考问题。

【92题】又叫荷兰旗问题。问题考的排序算法:将所有蓝旗放到白旗左边,红旗放到白旗右边。这与快速排序将小的数放到指定数的左边,大的数放到右边有异曲同工之妙。只不过快速排序指定的是一个数,而这里是多个同类型的数,即同一种颜色的旗子。

你可能感兴趣的:(C语言与数据结构总结,C语言)