C++课后习题训练记录Day179

📅 发布时间:2026/8/6 1:18:47
C++课后习题训练记录Day179 1.练习项目 问题描述肖恩需要在 n 道题中选出一套完整的比赛题集每道题都有一个难度分数 ai​ 。主办方要求肖恩选的题目必须满足以下条件难度分数必须包含起码 3 种不同的值。选出的题目中最难的题和最简单的题难度分差不能小于 x 。选出的题目难度分数的总和必须在 [l,r] 的范围内。请计算有多少种可能的选题方式满足以上所有条件。输入描述第一行包括四个整数 n,l,r,x 分别表示题目总数难度和区间最小难度差。第二行包括 n 个整数输入的第 i 个数字 a[i] 表示第 i 道题的难度。数据保证 1≤n≤15,1≤l≤r≤109,1≤x≤106,1≤a[i]≤106。输出描述输出一个数字表示可能的方案数。2.选择课程在蓝桥云课中选择题库选择题号3263并开始练习。3.开始练习1源码 #include bits/stdc.husing namespace std;int main() {int n, l, r, x;cin n l r x;int *arr (int *)malloc(sizeof(int) * (n 3));for (unsigned int i 0; i n; i) {cin arr[i];}int cnt 0;for (int i 0; i (int)pow(2, n); i) { //共有2^n种情况对应00...000~11...111setintst;//使用一个集合排除分数相同的题目int tmp i; //暂存当前的二进制数iint MAX -1, MIN 0x3fffff; //MAX用于记录所选题目中的最大值MIN记录最小值int sum 0; //sum用于累加选择的题目的分数和for (int j 0; j n; j) { //对于二进制数的每一位if (tmp 1) { //当前位为1则选择当前题目sum sum arr[j]; //累加分数st.insert(arr[j]);//插入集合中if (arr[j] MAX)MAX arr[j]; //更新最大值if (arr[j] MIN)MIN arr[j]; //更新最小值}tmp tmp 1;}if (sum l sum r st.size() 3 MAX - MIN x)cnt; //符合要求计数值加1}cout cnt endl; //输出计数值即可return 0;}2检验结果对此代码进行检验检验后无报错提交此代码判题结果为正确100分。3练习心得注意每段代码末尾的分号是否存在 如不存在则需即使补充输入法是否切换为英语模式语法是否错误。