CSDN竞赛第四期题解

一、小玉家的电费

题目描述:
夏天到了,各家各户的用电量都增加了许多,相应的电费也交的更多了。小玉家今天收到了一份电费通知单。小玉看到上面写:据闽价电[2006]27号规定,月用电量在150千瓦时及以下部分按每千瓦时0.4463元执行,月用电量在151~400千瓦时的部分按每千瓦时0.4663元执行,月用电量在401千瓦时及以上部分按每千瓦时0.5663元执行;小玉想自己验证一下,电费通知单上应交电费的数目到底是否正确呢。请编写一个程序,已知用电总计,根据电价规定,计算出应的电费应该是多少。
思路
算就完了

#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
	const double l1 = 0.4463, l2 = 0.4663, l3 = 0.5663;
	double sum;
	int n;
	cin >> n;
	if (n <= 150)
		sum = n * l1;
	else if (n <= 400)
		sum = 150 * l1 + (n - 150)*l2;
	else
		sum = 150 * l1 + 250 * l2 + (n - 400)*l3;
	cout <<fixed<< setprecision(1) << sum;
	return 0;
}

二、单词逆序

题目描述:
对于一个字符串,请设计一个算法,只在字符串的单词间做逆序调整,也就是说,字符串由一些由空格分隔的部分组成,你需要将这些部分逆序。 给定一个原字符串A,请返回逆序后的字符串。例,输入”I am a boy!“输出”boy! a am I“
思路
用双指针从后向前读,遇到空格进行打印并更新指针,注意对头部元素单独处理

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string a;
	getline(cin, a);
	int len = a.length();
	int k = len - 1;
	for (int i = len-1; i>=0; i--)
	{
		if (i == 0)
		{
			for(int j=0;j<=k;j++)
				cout << a[j];
			cout << " ";
		}
		if (a[i] == ' ')
		{
			for (int j = i+1; j <= k; j++)
				cout << a[j];
			cout << " ";
			k = i-1;
		}
	}
	return 0;
}

利用string类的substr也可以,进行截取打印

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string s1;
	getline(cin,s1);
	int flag=0;//记录空格位置
	for(int i=s1.size()-1;i>=0;i--)
	{
		flag++;
		if(s1[i]==' ')
		{
			cout<<s1.substr(i+1,flag-1)<<' ';
			flag=0;
		}
	}
	cout<<s1.substr(0,flag)<<endl;
	return 0;
}

三、小Q整数分割

题目描述:
小Q决定把一个整数n,分割为k个整数。 每个整数必须大于等于1。 小Q有多少方案。
思路
采用递归求解十分简单
对分割数k,当k=1时就不用分割了,一组分割方案已完成,返回1,方案数加1
最小整数为1,那么就以1为结果开始分。
由数学计算知被分的数总存在一方不大于n/k,一方大于。例如50分为1和49…一直到25 25 后面的就重复了,分三份则有16 17 17,因此只需考虑较小数的划分,即限定条件,i<=(n/k)
递归中将剩余数即n-i递归,此时已分出去一份i,因此还需分k-1个数,此时起点变为i,依次向下递归,返回的所有结果和即为所求答案,由于数据较大,最后取个模

#include<iostream>
using namespace std;
const long N=1e9+7;
int departnum(int n,int k,int num)
{
	if(k==1)
		return 1;
	else{
		int count=0;
		for(int i=num;i<=(n/k);i++)
		count+=departnum(n-i,k-1,i);
		return count;
		}
}
int main()
{
	int n,k;
	cin>>n>>k;
	cout<<departnum(n,k,1)%N;
}

四、新型美丽数列

题目描述:
定义美丽数列A: 1. 数列中相邻的数越是靠内相对大小加一,a[2]=a[1]+1,a[n-2]=a[n-1]+1… 2. 距离边缘距离相等的数的大小相等:a[0] = a[n-1],a[1] = a[n-2]… 通过修改最小的数字使得给定数列变成美丽数列。 修改后的值必须仍是正整数
输入描述:

第一行输入整数n。(1<=n<=1000)表示数列的大小。
第二行输入n个整数。

输出描述:

输出最小修改。

暂时不会,留个坑,以后来补

<think>嗯,用户现在在问HBCPC2020第四届河北省大学生程序设计竞赛题解。我之前已经提供了部分题解,比如7-1、7-5、7-7、7-10、7-12这些题目,但用户可能需要更详细的信息或者更多题目的解答。首先,我需要回顾之前的回答,确保不重复,同时补充新的内容。 用户引用了三个参考资料,其中引用[2]提到HBCPC2020的题解部分,里面包含了几个题目的基本思路和代码。用户可能希望得到更多题目的解析,或者更详细的步骤。比如,可能用户对某些题目的解法不太清楚,或者需要代码示例。 接下来,我需要检查是否有其他题目题解可以补充。例如,除了已经提到的7-1、7-5、7-7、7-10、7-12之外,可能还有7-2、7-3等其他题目。但根据现有的资料,引用[2]中提到的题解可能只有部分,所以可能需要说明题解覆盖的范围有限,并建议用户参考其他资源。 另外,用户可能需要具体的解题思路,比如动态规划、贪心算法等,或者代码实现的细节。例如,7-7划分问题中的动态规划方法,或者7-5删点问题的几何分析。需要确保解释清晰,步骤明确,帮助用户理解如何解决这些问题。 同时,用户可能对某些题目的输入输出处理有疑问,比如如何处理特殊字符或格式。例如,引用[3]中的代码示例处理了输入中的换行符,这可能对用户有帮助,可以结合到相关题目的解答中。 最后,考虑到用户可能需要更多的资源,我应该建议他们查阅官方渠道或社区论坛,如GitHub、CSDN等,以获取完整的题解和讨论。同时,询问用户是否有具体题目需要深入分析,这样可以更有针对性地提供帮助。</think>根据HBCPC2020第四届河北省大学生程序设计竞赛的公开资料,现提供部分题目解析及实现思路: ### 7-1 须知 **题目类型**:模拟题 **解题思路**: 1. 需要处理带有特殊格式的输入数据 2. 判断输入是否包含减号`-`决定输出类型 3. 使用字符串流处理混合数字和字符的输入 **示例代码片段**: ```python while n > 0: line = input().strip() if '-' in line: print(0) else: a, _, b = line.partition('+') print(int(a) + int(b)*20) ``` ### 7-5 删点 **题目类型**:几何/图论 **关键公式**: 对于给定点集$P = \{(x_i,y_i)\}$,计算满足: $$y_j > y_i \quad \text{或} \quad (y_j = y_i \ \text{且} \ x_j > x_i)$$ 的点对数量[^2] ### 7-7 划分 **题目类型**:动态规划 **状态转移方程**: $$dp[i] = \max(dp[i-1], dp[j] + \frac{i(i+1)}{2} - \frac{j(j+1)}{2}) \quad (0 \leq j < i)$$ 其中$dp[i]$表示前$i$个元素的最大划分值[^2] ### 7-10 奖牌 **题目类型**:贪心算法 **算法步骤**: 1. 按金牌数降序排序 2. 金牌相同时按银牌数降序 3. 再相同时按铜牌数降序 4. 使用稳定排序保持原始输入顺序 ### 7-12 挤牙膏 **题目类型**:数学建模 **关键公式**: $$体积计算:V = \pi \int_{a}^{b} (f(x))^2 dx$$ 其中$f(x)$为牙膏管的截面半径函数[^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

...404 Not Found

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值