C语言程序设计<穷举法>

韩信点兵

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文钱?

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值