蓝桥杯

前言

4月份就开始蓝桥杯省赛了,开始准备蓝桥杯了,冲冲冲

一、找规律求解

该题目涉及了3个变量,层数(a),煤球个数(b),煤球总数©

可以看到一个规律,每一层的煤球个数都是这一层加上上一层的煤球个数组成,比如6=第三层+3个,10=第四层+6个
所以 num[i]=num[i-1]+a;

#include<stdio.h>
int main()
{
	int a,b=0,c=0;
	for(a=1;a<=100;a++)
	{
		b=b+a;
		c=b+c;
	}
	printf("%d",c);
	return 0;
}

二、枚举

枚举通常用于对问题没有思路,或者短时间内想不出更好的办法解决,使用枚举增加得分率。但并不是所有的题目都能枚举。

什么是素数呢,素数就是只能写成1乘以他本身的数。

/*从N开始递减查找最大的素数,查找到就结束循环 */
#include<stdio.h>
int main()
{
	int a,n;
	scanf("%d",&n);
	do
	{
		for(a=2;a<n;a++)
		{
			if(n%a==0)
			{
				n--;
				a=2;
			}
		}
	}while(a!=n);
	printf("%d\n",n);
	return 0;
}

一共有4个整型变量,写一个四层for循环,遍历每一个变量的每一种组合
然后确定变量的范围a=[2,N]
b=[2,a)
c=[b,a)
d=[c,a)

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int a,b,c,d,n;
	cin>>n;
	for(int a=2;a<=n;a++)
	{for(b=2;b<a;b++)
	{
		for(c=b;c<a;c++)
		{
			for(d=c;d<a;d++)
			{
				if(a*a*a==b*b*b+c*c*c+d*d*d)
				cout<<"Cube="<<a<<","<<"Triple="<<b<<","<<c<<","<<d<<endl;
			}
		}
	}
	}
}

3个变量,x、y、z分别代表公鸡母鸡小鸡
3个变量3层for循环
关系:
x+y+z=100
5x+3y3z/3=100
x的取值【0,20】
y的取值【0,33】
z的取值【0,100-x-y】

int main()
{
int x,y,z;
for(x=0;x<=20;x++)
{for(y=0;y A  H<=33;y++)
{z=100-x-y;
if(5*x+3*y+z/3.0==100)
{
	printf("公鸡%d母鸡%d小鸡%d\n",x,y,z);
}
}
}
}

总结
枚举的要点:
1、确定变量的个数、找出条件
2、确定变量的取值范围、尽可能排除不可能的情况
3、确定遍历的顺序
4、注意细节(边界、精度转换)