首先看题目吧
1、猴子吃桃:猴子第一天摘了若干个桃子,当即吃了一半,不过瘾,又多吃了一个;第二天早上又把昨天剩下的桃子又吃了一半,还是不过瘾,于是又多吃了一个。以后每天早上都是吃掉昨天剩下的桃子的一半加一个,到第十天的时候,见只剩下一个桃子了。编写程序求第一天摘了多少个?
2、灯塔数量问题:有一个8层的灯塔,每层的灯数都是上一层的2倍,一共有765盏灯,编程求最上层和最下层的灯数?
当然,这两个题一点不难,只是有一点感悟,还是先看第一道题的程序吧,
- #include<stdio.h>
- void main(){
- int x1 , x2;
- int i;
- x2 = 1;
- for(i = 0 ; i < 9 ; i++){
- x1 = (x2+1)*2;
- x2 = x1;
- }
- printf("the total is %d \n" , x1);
- }
第一步,谁都能想到要用循环来解决;
第二步,循环就要找到相同点进行循环,很明显,这个题,前一天的桃子数量是后一天桃子数量的2倍加上1;
于是,很容易写出程序了,设x1是前一天的桃子数量,x2是后一天的,从后往前进行循环,从第九天开始算,那么x2的初值就出来了,x2=1。
那么来看看第二题的程序吧
- #include<stdio.h>
- void main(){
- int low = 1;
- int sum,i;
- while(1){
- int top;
- int m;
- m = low;
- sum = low ;
- for(i = 1 ; i < 8 ; i++){
- m = m * 2 ;
- sum = sum + m;
- }
- top = m;
- if(sum == 765){
- printf("1楼灯的数量是:%d \n" , low);
- printf("8楼灯的数量是:%d \n" , top);
- break;
- }
- low++;
- }
- }
第一步,还是循环,可是这一次有点不一样;
第二部,找相同点进行循环,同样很简单,上一层的灯数都是下一层的2倍;
第三部,初值?是不是找不到初值,因为没有初值,你不知道第1层多上灯,或是第8层多少灯,不像上一题,可以直接一个循环就解决了;
那么,这次你就需要两次循环,外循环,就是穷举法,既然不知道初值,就假设初值从1开始推算,先设low为最底层的灯数,初值为1,然后每次low++,知道找到那个low的值,break出循环。
其实,这两道题都是比较基础的C语言题,但是却是很重要的基本技能,在很多的大应用程序开发中,都有它们的原型出现。
转载于:https://blog.51cto.com/pengloo53/1073080