【蓝桥杯】真题练习

1.饮料换购
2.牌型种类
3.煤球数目
4.生日蜡烛
5.凑算式
6.纸牌三角形

1.饮料换购
饮料厂举办一次促销优惠活动,乐羊羊C型饮料,凭3个瓶盖可以再换一瓶C型饮料,并且可以一直循环下去(但不允许暂借或赊账)。请你计算一下,如果小明不浪费瓶盖,尽可能地参加活动,那么,对于他初始买入的n瓶饮料最后他一共能喝到多少瓶饮料?
输入:一个整数n,表示开始购买的饮料数量(0<n<10000)
输出:一个整数,表示实际得到的饮料数

解题思路
每三个瓶盖换一瓶,则增加一个瓶盖

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n;cin>>n;
	int sum=n; //sum饮料 
	int m=n; //m瓶盖
	while(m>=3)
	{
		m-=3;
		m+=1;
		sum+=1;
	} 
	cout<<sum;
}

2.牌型种类
小明被劫持到X赌城,被迫与其他3人玩牌。
一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。
这时,小明脑子里突然冒出一个问题:
如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序
自己手里能拿到的初始牌型组合一共有多少种呢?

解题思路
只考虑点数有13个点数(1.2.3-j.q.k),则有13个for循环,
每人13张,则加起来为13,满足+1

#include<bitsdc++.h>
using namespace std;
int main()
{
	int a[13];
	int sum=0;
	for(a[0]=0;a[0]<=4;a[0]++)
		for(a[1]=0;a[1]<=4;a[1]++)
			for(a[2]=0;a[2]<=4;a[2]++)
				for(a[3]=0;a[3]<=4;a[3]++)
					for(a[4]=0;a[4]<=4;a[4]++)
						for(a[5]=0;a[5]<=4;a[5]++)
							for(a[6]=0;a[6]<=4;a[6]++)
								for(a[7]=0;a[7]<=4;a[7]++)
									for(a[8]=0;a[8]<=4;a[8]++)
										for(a[9]=0;a[9]<=4;a[9]++)
											for(a[10]=0;a[10]<=4;a[10]++)
												for(a[11]=0;a[11]<=4;a[11]++)
													for(a[12]=0;a[12]<=4;a[12]++)
													{
														if(a[0]+a[1]+a[2]+a[3]+a[4]+a[5]+a[6]+a[7]+a[8]+a[9]+a[10]+a[11]+a[12]==13)
														{
															sum++;
														}
													}
    cout<<sum<<endl;
}

3.煤球数目
有一堆煤球,堆成三角棱锥体。具体:
第一层放1个,第二层3个,第三层6个,第四层10个,…如果一共有100层,共有多少个煤球?

解题思路
规律题,每次增加的量+1,第二层比第一层多2,第三层比第二层多3…

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int a[100],t=2,sum=1;
	a[0]=1;
	for(int i=1;i<100;i++) 
	{
		a[i]=a[i-1]+t;
		sum+=a[i];
		t++;
	}
	cout<<sum<<endl;
}

4.生日蜡烛
某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。
现在算起来,他一共吹熄了236根蜡烛。
请问,他从多少岁开始过生日party的?

解题思路
模拟枚举,假设从i岁(1-30)开始过生日,满足吹熄的蜡烛正好236根则满足输出i岁

#include<bits/stdc++.h>
using namespace std;
int main()
{
	for(int i=1;i<=30;i++)
	{
		int sum=0;
		for(int j=i;j<=100;j++)
		{
			sum+=j;
			if(sum==236)
			{
				cout<<i<<endl;
				break;
			}
		}
	}
}

5.凑算式
在这里插入图片描述
这个算式中A-I代表1-9的数字,不同的字母代表不同的数字。
比如:
6+8/3+952/714 就是一种解法,
5+3/1+972/486 是另一种解法。
这个算式一共有多少种解法?
注意:你提交应该是个整数,不要填写任何多余的内容或说明性文字。

解题思路
直接暴力枚举9for,通分满足ACGHI+BGHI+CDEF=10CGHI则+1

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int sum=0;
    for(int a=1;a<=9;a++)
        for(int b=1;b<=9;b++)
            for(int c=1;c<=9;c++)
                for(int d=1;d<=9;d++)
                    for(int e=1;e<=9;e++)
                        for(int f=1;f<=9;f++)
                            for(int g=1;g<=9;g++)
                                for(int h=1;h<=9;h++)
                                    for(int i=1;i<=9;i++)
                                    {
                                    	
                                    	if(a!=b&&a!=c&&a!=d&&a!=e&&a!=f&&a!=g&&a!=h&&a!=i&&
										   b!=c&&b!=d&&b!=e&&b!=f&&b!=g&&b!=h&&b!=i&&
										   c!=d&&c!=e&&c!=f&&c!=g&&c!=h&&c!=i&&
										   d!=e&&d!=f&&d!=g&&d!=h&&d!=i&&
										   e!=f&&e!=g&&e!=h&&e!=i&&
										   f!=g&&f!=h&&f!=i&&
										   g!=h&&g!=i&&
										   h!=i)
										{
											int t1=a*c*(100*g+10*h+i);
											int t2=b*(100*g+10*h+i);
											int t3=c*(100*d+10*e+f);
											int t4=10*c*(100*g+10*h+i);
											if(t1+t2+t3==t4) sum++;
										}
                                    }
    cout<<sum<<endl;
}

6.纸牌三角形
在这里插入图片描述

解题思路
继续暴力枚举,设
a
b c
d e
f g h i,范围1-9,且各不相等,且各边相加相等,考虑旋转和镜像后的算同一种,共有6种(旋转/3镜像/2),得到结果/6

#include<bitsdc++.h>
using namespace std;
int main()
{
	int sum=0;
	for(int a=1;a<=9;a++)
		for(int b=1;b<=9;b++)
			for(int c=1;c<=9;c++)
				for(int d=1;d<=9;d++)
					for(int e=1;e<=9;e++)
						for(int f=1;f<=9;f++)
							for(int g=1;g<=9;g++)
								for(int h=1;h<=9;h++)
									for(int i=1;i<=9;i++)
									{
										if(a!=b&&a!=c&&a!=d&&a!=e&&a!=f&&a!=g&&a!=h&&a!=i&&
										b!=c&&b!=d&&b!=e&&b!=f&&b!=g&&b!=h&&b!=i&&
										c!=d&&c!=e&&c!=f&&c!=g&&c!=h&&c!=i&&
										d!=e&&d!=f&&d!=g&&d!=h&&d!=i&&
										e!=f&&e!=g&&e!=h&&e!=i&&
										f!=g&&f!=h&&f!=i&&
										g!=h&&g!=i&&
										h!=i)
										{
											int x1=a+b+d+f;
											int x2=a+c+e+i;
											int x3=f+g+h+i;
											if(x1==x2&&x2==x3) sum++;
										}
									}
	cout<<sum/6<<endl;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值