循环的经典案例(李白买酒)

1:计算0~100之间所有能被3整除和带3的数字之和

int i=0;//循环变量

   int sum=0;

   while(i<100){

      if((i%3==0)||(i%10==3)||(i/10==3)){

      sum+=i;

    }

    i++;

   }

   printf("0~100之间所有能被3整除和带3的数字之和为%d",sum);

2:打印100~1000之间所有水仙花数,并统计其个数:==>153=1^3+5^3+3^3

int i=100;//循环变量

  int count=0,ge,shi,bai,he;//统计水仙花数

  do{

    ge=i%10;//获取个位

    shi=i/10%10;//获取十位

    bai=i/100; //获取百位

    he=ge*ge*ge+shi*shi*shi+bai*bai*bai;

    if(he==i){

         printf("%d ",i);

         count++;

}

   i++;

  }while(i<1000);

  printf(" 100~1000之间共有%d个水仙花数",count);

3:李白闲来无事街上走,提壶去买酒,遇店加一倍,遇花喝一斗,五遇花和店喝光壶中酒,李白壶中原有多少酒? ===>逆向思维

  //分析:假设原有壶中有x斗酒;===>遇到花之前(x+1);遇到店之前(x+1)/2

#include <stdio.h>
void main(){
    float x=0;//壶中原有酒的斗数
    int i=0;

    while(i<5){

        x=(x+1)/2;//遇到花和店之前的壶中酒的斗数

        i++;

    }

    printf("李白壶中原有%.3f斗酒",x);//%.3f保留小数点后三位
}
原文地址:https://www.cnblogs.com/xiaomeng7/p/6602950.html