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

1.练习项目 :

问题描述

肖恩需要在 n 道题中选出一套完整的比赛题集,每道题都有一个难度分数 ai​ 。主办方要求肖恩选的题目必须满足以下条件:

难度分数必须包含起码 3 种不同的值。

选出的题目中,最难的题和最简单的题难度分差不能小于 x 。

选出的题目难度分数的总和必须在 l,r 的范围内。

请计算有多少种可能的选题方式满足以上所有条件。

输入描述

第一行包括四个整数 n,l,r,x ,分别表示题目总数,难度和区间,最小难度差。

第二行包括 n 个整数,输入的第 i 个数字 ai 表示第 i 道题的难度。

数据保证 1≤n≤15,1≤l≤r≤109,1≤x≤106,1≤ai≤106。

输出描述

输出一个数字表示可能的方案数。

2.选择课程

在蓝桥云课中选择题库,选择题号3263并开始练习。

3.开始练习

(1)源码 :

#include <bits/stdc++.h>

using 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 >> arri;

}

int cnt = 0;

for (int i = 0; i < (int)pow(2, n); i++) { //共有2^n种情况,对应00...000~11...111

set<int>st;//使用一个集合排除分数相同的题目

int tmp = i; //暂存当前的二进制数i

int MAX = -1, MIN = 0x3fffff; //MAX用于记录所选题目中的最大值,MIN记录最小值

int sum = 0; //sum用于累加选择的题目的分数和

for (int j = 0; j < n; j++) { //对于二进制数的每一位

if (tmp & 1) { //当前位为1,则选择当前题目

sum = sum + arrj; //累加分数

st.insert(arrj);//插入集合中

if (arrj > MAX)MAX = arrj; //更新最大值

if (arrj < MIN)MIN = arrj; //更新最小值

}

tmp = tmp >> 1;

}

if (sum >= l && sum <= r && st.size() >= 3 && MAX - MIN >= x)cnt++; //符合要求,计数值加1

}

cout << cnt << endl; //输出计数值即可

return 0;

}

(2)检验结果

对此代码进行检验,检验后无报错,提交此代码,判题结果为正确100分。

(3)练习心得:

注意每段代码末尾的分号是否存在 ,如不存在则需即使补充;输入法是否切换为英语模式;语法是否错误。

相关推荐
longlongzihan42 分钟前
LeetCode 5. 最长回文子串:从暴力匹配到中心扩展的思维演进
c++·算法·leetcode
多弗朗皮卡丘1 小时前
C++继承
c++·继承
geovindu1 小时前
rust: Abstract Factory pattern
开发语言·后端·设计模式·rust·抽象工厂模式
“AI国潮设计-小江”1 小时前
《Python+SDXL实战:用ControlNet批量生成“英歌舞麻将糕”IP,附自动化脚本与商用思路》
开发语言·人工智能·python·prompt·aigc
Cc.Y2 小时前
Java零基础入门:封装与继承 —— 从“裸奔“到“穿衣服“,从“重复造轮子“到“站在巨人肩膀上“
java·开发语言
Escalating_xu2 小时前
【C 语言】深入理解指针(4):回调函数、qsort、void * 与泛型排序的模拟实现
java·c语言·开发语言
汉克老师2 小时前
GESP2026年9月认证C++七级( 第三部分编程题(2、括号序列))精讲
c++·gesp·小学生·学c++编程
吠品2 小时前
GitHub 周榜拆解:决策小模型扎堆上位
c语言·开发语言·算法
见叶之秋2 小时前
C++ 泛型世界的两块拼图:容器适配器与仿函数
java·开发语言
逗脑IDE3 小时前
零基础学ESP32:RFID无线射频卡——让ESP32拥有“刷卡“能力!
开发语言·网络·人工智能·python·esp32·硬件开发