韩信点兵
1.for循环
韩信先令士兵从1-5报数,最后一个士兵报1;从1-6报数,最后一个士兵报5;从1-7报数,最后一个士兵报4;从1-11报数,最后一个士兵报10;
#include<stdio.h>
int main()
{
int x;
for(x=1; ; x++) //中间没有条件直接空下
{
if(x%5==1 && x%6==5 && x%7==4 && x%11==10) //是== 不是=
{
printf("x=%d", x);
break;
}
}
return 0;
}
2.标志变量法
#include<stdio.h>
int main()
{
int x;
int find=0; //设找到为假
for(x=1; !find; x++) //找不到继续循环,找到退出循环
{
if(x%5==1 && x%6==5 && x%7==4 && x%11==10)
{
printf("x=%d", x);
find = 1; //找到为真,推出循环
}
}
return 0;
}
标志变量求多解
#include<stdio.h>
int main()
{
int x;
int find=0; //设了一个标志变量或者说计数器
for(x=1; find<5; x++)
{
if(x%5==1 && x%6==5 && x%7==4 && x%11==10)
{
printf("x=%d\n", x);
find++;
}
}
return 0;
}
3.do-while循环
#include<stdio.h>
int main()
{
int x=1;
int find=0;
do{
x++;
if(x%5==1 && x%6==5 && x%7==4 && x%11==10)
{
printf("x=%d", x);
find=1;
}
}while(!find);
return 0;
}
#include<stdio.h>
int main()
{
int x=1;
int find=0;
do{
x++;
find=(x%5==1 && x%6==5 && x%7==4 && x%11==10); //括号内的成立,则find为1
}while(!find);
printf("x=%d", x);
return 0;
}
#include<stdio.h>
int main()
{
int x=1;
do{
x++;
}
while(!(x%5==1 && x%6==5 && x%7==4 && x%11==10));
printf("x=%d", x);
return 0;
}
灯塔游戏
有一个八层高的灯塔,每层所点灯数等于上一层的二倍,一共有765盏灯,求塔底灯数。
#include<stdio.h>
int main()
{
int x, s, i, k; //x为顶层灯数, s用来累加每层灯数,
for(x=1; ; x++)
{
s = 0;
k = x;
for(i=1; i<=8; i++)
{
s = s+k;
k = k*2;
}
if(s == 765)
break;
}
printf("\n%d", k/2);
return 0;
}
百钱百鸡问题
公鸡5文钱一只,母鸡3文钱一只,小鸡三文钱一只,
用100文钱买100只鸡,其中公鸡,母鸡,小鸡都必须有,
问:公鸡,母鸡,小鸡要买多少只刚好凑够100文钱?