首先看题目吧

1、猴子吃桃:猴子第一天摘了若干个桃子,当即吃了一半,不过瘾,又多吃了一个;第二天早上又把昨天剩下的桃子又吃了一半,还是不过瘾,于是又多吃了一个。以后每天早上都是吃掉昨天剩下的桃子的一半加一个,到第十天的时候,见只剩下一个桃子了。编写程序求第一天摘了多少个?

2、灯塔数量问题:有一个8层的灯塔,每层的灯数都是上一层的2倍,一共有765盏灯,编程求最上层和最下层的灯数?

当然,这两个题一点不难,只是有一点感悟,还是先看第一道题的程序吧,

  1. #include<stdio.h>
  2. void main(){ 
  3.     int x1 , x2; 
  4.     int i; 
  5.     x2 = 1; 
  6.     for(i = 0 ; i < 9 ; i++){ 
  7.         x1 = (x2+1)*2; 
  8.         x2 = x1; 
  9.     } 
  10.     printf("the total is %d \n" , x1); 

第一步,谁都能想到要用循环来解决;

第二步,循环就要找到相同点进行循环,很明显,这个题,前一天的桃子数量是后一天桃子数量的2倍加上1;

于是,很容易写出程序了,设x1是前一天的桃子数量,x2是后一天的,从后往前进行循环,从第九天开始算,那么x2的初值就出来了,x2=1。

 

那么来看看第二题的程序吧

  1. #include<stdio.h> 
  2. void main(){
  3.     int low = 1; 
  4.     int sum,i; 
  5.     while(1){ 
  6.         int top; 
  7.         int m; 
  8.         m = low; 
  9.         sum = low ; 
  10.         for(i = 1 ; i < 8 ; i++){ 
  11.             m = m * 2 ;  
  12.             sum = sum + m; 
  13.         } 
  14.         top = m;  
  15.         if(sum == 765){ 
  16.             printf("1楼灯的数量是:%d \n" , low); 
  17.             printf("8楼灯的数量是:%d \n" , top); 
  18.             break
  19.         } 
  20.     low++; 
  21.     } 
  22. }

第一步,还是循环,可是这一次有点不一样;

第二部,找相同点进行循环,同样很简单,上一层的灯数都是下一层的2倍;

第三部,初值?是不是找不到初值,因为没有初值,你不知道第1层多上灯,或是第8层多少灯,不像上一题,可以直接一个循环就解决了;

那么,这次你就需要两次循环,外循环,就是穷举法,既然不知道初值,就假设初值从1开始推算,先设low为最底层的灯数,初值为1,然后每次low++,知道找到那个low的值,break出循环。

 

其实,这两道题都是比较基础的C语言题,但是却是很重要的基本技能,在很多的大应用程序开发中,都有它们的原型出现。