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)练习心得:

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

相关推荐
誰能久伴不乏2 小时前
桌面客户端的运行日志系统:SQLite 分块 + 独立写线程 + 文本降级
数据库·c++·qt·架构·sqlite
2601_966949657 小时前
如何根据研究的起止时间截取分钟级行情?Python 实战与 QuantDash 数据处理指南
开发语言·python·pandas·量化交易·1024程序员节·股票数据·quantdash
晨曦中的暮雨9 小时前
限流算法——固定窗口、滑动窗口、漏桶、令牌桶
java·开发语言·算法
喵了几个咪9 小时前
GoWind CMS 拆解:在 Go 里给 TipTap 搭一套 Yjs 协同后端
开发语言·后端·golang
程序员清风10 小时前
数据处理脚本工程化:日志、配置、命令行与测试
服务器·开发语言·数据库
2601_9628857211 小时前
如何用 Python 把 K 线重采样成任意周期?
开发语言·python
choumin12 小时前
C++中万能引用与std::forward的作用和用法
c++·万能引用·std forward
Wang's Blog12 小时前
Java 项目实战: 交友项目 - 圈子功能实现:总结
java·开发语言·交友
下一站春风里12 小时前
位运算完整学习笔记:按位与(&)+ 异或(^)
开发语言·c++·算法
天外飞雨道沧桑13 小时前
我在浏览器里练了一个 792 参数的大模型,它学会了补全 JavaScript
开发语言·javascript·ai·ecmascript·ai编程