第六届蓝桥杯2015-省赛-C语言大学B组 个人题解

本文解析了多个蓝桥杯编程题目,包括去除数字4的奖券数目计算、日期推算、垒骰子的概率计算等问题,并提供了完整的C++代码实现。
部署运行你感兴趣的模型镜像

题目连接:http://course.baidu.com/view/2d86a6c1960590c69fc37622.html

1,奖券数目52488

#include <iostream>
using namespace std;
bool isOK(int a)
{
	while(a)
	{
		if(a%10==4) return false;
		a /= 10;
	}
	return true;
}
int main()
{
	int ans = 0;
	for(int i=10000; i<=99999; i++)
	{
		if(isOK(i))
		{
			ans++;
		}
	}
	cout << ans << endl;
	return 0;
}

2,星系炸弹2017-08-05

#include <iostream>
using namespace std;
bool jwd(int y, int m, int d)
{
	if(m==4 || m==6 || m==9 || m==11)
	{
		return d > 30;
	}else if(m==2)
	{
		if((y%4==0 && y%100!=0) || (y%400==0))
		{
			return d > 29;
		}else{
			return d > 28;
		}
	}else{
		return d > 31;
	}
}
int main()
{
	int y, m, d, ct = 1000;
	y = 2014;
	m = 11;
	d = 9;
	while(ct--)
	{
		d++;
		if(jwd(y, m, d))
		{
			d = 1;
			m++;
		}
		if(m>12)
		{
			m = 1;
			y++;
		}
	}
	cout << y << "-" << m << "-" << d << endl;
	return 0;
}

3,三羊献瑞1085

暴力枚举做的

4,格子中输出(width-2-strlen(buf))/2,"",buf,width-2-(width-2-strlen(buf))/2-strlen(buf),""

5,九数组分数{t=x[k]; x[k]=x[i]; x[i]=t;}

6,加法变乘法16

#include <iostream>
using namespace std;
int main()
{
	int a, b, sum = 1225;
	for(a=1; a<=49; a++)
	{
		for(b=a+2; b<=49; b++)
		{
			int k = sum - 2*a - 1 - 2*b - 1 + a*a + a + b*b + b;
			if(k == 2015)
			{
				cout << a << endl;
			}
		}
	}
	return 0;
}
7,牌型种数3598180

#include <iostream>
using namespace std;
int dfs(int pai, int ct)
{
	if(pai == 13)
	{
		return ct <= 4;
	}
	int res = 0;
	res += dfs(pai+1, ct);
	if(ct >= 1)
	res += dfs(pai+1, ct-1);
	if(ct >= 2)
	res += dfs(pai+1, ct-2);
	if(ct >= 3)
	res += dfs(pai+1, ct-3);
	if(ct >= 4)
	res += dfs(pai+1, ct-4);
	return res;
}
int main()
{
	cout << dfs(1, 13) << endl;
	return 0;
}

8,移动距离

#include <iostream>
using namespace std;
int main()
{
	int w, n, m;
	int x1, y1, x2, y2;
	cin >> w >> m >> n;
	x1 = (m + w - 1) / w;
	if(x1%2==1)
	{
		y1 = m - (x1 - 1) * w;
		
	}else{
		y1 = w - (m - (x1 - 1) * w) + 1;
	}
	x2 = (n + w - 1) / w;
	if(x2%2==1)
	{
		y2 = n - (x2 - 1) * w;
		
	}else{
		y2 = w - (n - (x2 - 1) * w) + 1;
	}
	int ans = 0;
	if(x1 > x2)
	{
		ans += x1 - x2;
	}else{
		ans += x2 - x1;	
	}
	if(y1 > y2)
	{
		ans += y1 - y2;
	}else{
		ans += y2 - y1;
	}
	cout << ans << endl;
	return 0;
}
9,垒骰子
#include <iostream>
#include <cstring>
using namespace std;
const int MOD = 1000000007;
bool ok[7][7];
__int64 dp[110000][7];
__int64 dfs(int n,int pre)
{
	if(n==0)
	{
		return dp[n][pre] = 1;
	}
	if(dp[n][pre]!=-1) return dp[n][pre];
	__int64 res = 0;
	for(int i=1; i<=6; i++)
	{
		if(ok[pre][i])
		res += dfs(n-1, i)*4;
	}
	return dp[n][pre] = res%MOD;
}
int main()
{
	int n, m, a, b;
	cin >> n >> m;
	memset(dp, -1, sizeof (dp));
	for(int i=0; i<=6; i++)
	{
		for(int j=0; j<=6; j++)
		{
			ok[i][j] = true;
		}
	}
	while(m--)
	{
		cin >> a >> b;
		ok[a][b] = ok[b][a] = false;
	}
	cout << dfs(n, 0) << endl;
	return 0;
}

这个只能过60%,数学不会没办法,看大神的题解好像是要矩阵快速乘法

10,生命之树
#include <iostream>
#include <stdio.h>
#include <vector>
#include <cstring>
using namespace std;
vector<int>G[100010];
int val[100010];
bool use[100010];
__int64 ans;
__int64 dfs(int xb)
{
	use[xb] = true;
	__int64 res = val[xb];
	for(int i=0; i<G[xb].size(); i++)
	{
		 int k = G[xb][i];
		 if(!use[k])
		 {
		 	int b = dfs(k);
		 	if(b>0)
		 	res += b;
		 }
	}
	if(ans < res)
	{
		ans = res;
	}
	return res;
}
int main()
{
	int n, i, a, b;
	scanf("%d", &n);
	for(i=1; i<=n; i++)
	{
		scanf("%d", &val[i]);
		G[i].clear();
	}
	for(i=1; i<n; i++)
	{
		scanf("%d %d",&a, &b);
		G[a].push_back(b);
		G[b].push_back(a);
	}
	memset(use, 0, sizeof (use));
	ans = val[1];
	dfs(1);
	cout << ans << endl;
	return 0;
}

蓝桥杯已经算是告一段落咯,数学题目什么都还不会,得要加油学习了!






您可能感兴趣的与本文相关的镜像

Llama Factory

Llama Factory

模型微调
LLama-Factory

LLaMA Factory 是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。通过 LLaMA Factory,可以在无需编写任何代码的前提下,在本地完成上百种预训练模型的微调

<think>好的,我需要帮助用户查找第15届蓝桥杯C语言B的竞题目。首先,根据用户提供的引用内容,引用[1]、[3]、[4]都提到了第十五届蓝桥杯的相关信息,特别是C/C++大学B的真题。不过,用户提到的是C语言B,而引用中大部分是C++,但通常蓝桥杯的C和C++题目是相同的,只是编程语言不同。 接下来,我需要从提供的引用中提取相关的题目信息。引用[1]提到了“握手问题”是C/C++的真题之一。引用[2]虽然属于第十一届的题解,但用户可能误引,不过这里主要关注第十五届的信息。引用[3]和[4]都详细提到了具体的题目,比如“小球反弹”和解题代码,引用[4]还列出了多个题目,包括握手问题、好数、R格式、宝石合、数字接龙、拔河等。 用户明确需要的是第十五届C语言B的题目,所以需要整理引用中提到的相关题目。根据引用[1]、[3]、[4],可以确定部分题目名称。例如,引用[1]提到握手问题,引用[3]详细描述了小球反弹的Java代码,引用[4]的目录中列出了握手问题、小球反弹、好数、R格式、宝石合、数字接龙、拔河等题目。 需要注意的是,虽然用户请求的是题目内容,但提供的引用中并没有完整的题目描述,只有部分解题思路或代码片段。例如,引用[3]中的代码是针对小球反弹问题的,而引用[4]的目录结构显示了多个题目名称。因此,在回答用户时,应明确说明现有资料中可获取的题目名称和相关解题思路,但无法提供完整的题目描述。 此外,用户可能希望知道如何获取这些题目的完整内容,但由于引用的资料并未包含完整题目,只能建议用户通过官方渠道或可靠的竞平台获取原题。同时,根据引用内容中的信息,可以推测部分题目的考察点,如握手问题涉及合数学或暴力枚举,小球反弹涉及物理模拟和数学计算,好数和R格式可能与算法处理有关,宝石合可能涉及数学定理,数字接龙和拔河可能涉及搜索算法或动态规划。 最后,需要按照用户的要求生成相关问题,这些问题应围绕蓝桥杯题目、解题方法、备经验等方面展开,帮助用户进一步探索相关内容。</think>根据现有资料,第十五届蓝桥杯C语言B的部分竞题目及解题思路如下: ### 已知题目及解析 1. **握手问题** - **考察点**:合数学或暴力枚举[^1][^4] - **解题思路**: - 若总共有$n$个人,两两不重复握手次数为合数$C(n,2)$,但需注意题目中可能存在的约束条件[^1] - 暴力枚举法可通过遍历所有可能的握手合实现 2. **小球反弹** - **考察点**:物理运动模拟、最小公倍数、勾股定理[^3] - **题目描述**:小球在矩形区域内以固定速度$(dx, dy)$运动,触边反弹,求某次反弹后的运动总距离 - **代码片段**: ```java // 计算最小公倍数和勾股定理求距离 int gcd(int a, int b) { /*...*/ } double ans = t * sqrt(15*15 + 17*17); // 输出保留两位小数 ``` 3. **好数** - **考察点**:数位处理、暴力解法 - **解题思路**:遍历数字并检查其数位是否符合特定条件(如奇偶交替)。 4. **R格式** - **考察点**:浮点数精度处理或进制转换[^4] - **可能要求**:将浮点数按特定格式舍入或转换为R进制表示。 5. **宝石合** - **考察点**:数学定理(如唯一分解定理)[^4] - **解题思路**:分析宝石属性之间的关系,利用因数分解优化合选择。 6. **数字接龙** - **考察点**:深度优先搜索(DFS) - **可能要求**:寻找最长数字序列,满足相邻数字的特定规则。 7. **拔河** - **考察点**:动态规划或贪心算法 - **可能要求**:分配两队人员,使体重总和尽量接近。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值