蓝桥杯(2021第十二届C/C++真题[省赛][B组])

卡片

蓝桥杯(2021第十二届C/C++真题[省赛][B组])_第1张图片

习题链接:3.卡片 - 蓝桥云课 (lanqiao.cn) 

思路: 先将每个卡片所拥有的数量存储在对应卡片号的数组里。对每一位数字进行拆分,使用一次减一次。判断卡片数量,当卡片数量等于0时,表明此时已经无法构成数字,则输出这时的数字。

题解:

#include
using namespace std;
int n[10],num;
int main()
{
	for(int i=0;i<=9;i++) n[i]=2021;
	for(int i=1;i<=20210;i++)
	{
		num=i;
		while(num)
		{
			if(n[num%10]==0)
			{
				cout<

 答案:3181 


直线

蓝桥杯(2021第十二届C/C++真题[省赛][B组])_第2张图片

习题链接:1.直线 - 蓝桥云课 (lanqiao.cn)

思路:两点式直线方程: (y-y2)/ (y1-y2) = (x-x2)/ (x1-x2)

(y1-y2) * x +(x2-x1) * y +( x1 * y2 - x2 * y1)=0

先存储所有的坐标 ,遍历所有的坐标组获得直线Ax+By+C=0的A,B,C并使用gcd约分最后再利用set去重,最后再加上垂直于x轴和y轴的数。

题解:

#include
#include
using namespace std;
set,double> > s;//存斜率和截距 
int gcd(int x,int y)//求最大公约数 
{
	if(y==0) return x;
	return gcd(y,x%y);
}
int main()
{
	for(int x1=1;x1<=20;x1++)
	{
		for(int y1=1;y1<=21;y1++)
		{
			for(int x2=1;x2<=20;x2++)
			{
				for(int y2=1;y2<=21;y2++)
				{
					if(x1!=x2&&y1!=y2)
					{
						double a=x2-x1;
						double b=y2-y1;
						double c=x1*y2-x2*y1;
						double t=gcd(gcd(a,b),c);
						s.insert({
  {a/t,b/t},c/t});
					}
				} 
			}
		}
	}
	cout<

 答案:40257 


货物摆放

你可能感兴趣的:(蓝桥杯,c语言,c++)