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

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

相关推荐
讳疾忌医丶7 小时前
深度拆解 RocksDB 内核:基于 C++17 的 FIFO 调度状态机与温度阶梯自愈设计
java·c++·算法·架构
lsswear7 小时前
Python 并发 线程
开发语言·python
2401_868534787 小时前
OpenStack 架构全景:八个核心组件深度拆解
c++·需求分析
郑州光合科技余经理7 小时前
国际版外卖系统:税率字段怎么和订单主流程解耦
android·java·开发语言·前端·后端·php·ai编程
软件课代表CiCi7 小时前
运行库是什么?电脑缺运行库怎么办?c++运行库缺失修复全攻略
开发语言·c++·windows·电脑·dll修复·dll丢失·运行库
Ivanqhz8 小时前
MLIR OpBuilder
开发语言·python·mlir
蒸蒸yyyyzwd9 小时前
从面经中学到的三件事
c++·笔记
时时三省9 小时前
【时时三省】计算机c语言二级考试选择题重点
c++
红宝村村长9 小时前
windows笔记本双系统ubuntu设置
开发语言
菜鸟~noob23310 小时前
【电子战】第15篇:混合定位——TDOA/FDOA/AOA 联合【含matlab代码】
开发语言·matlab