当前位置: 首页 > news >正文

AI题解5

B4283 [蓝桥杯青少年组省赛 2022] 分成整数

提交答案加入题单复制题目

提交1.15k

通过582

时间限制1.00s

内存限制512.00MB

题目编号B4283

提供者

chen_zhe

难度普及−

历史分数100

 提交记录    查看题解    题目反馈

标签

蓝桥杯青少年组2022

显示算法标签

相关讨论

进入讨论版

查看讨论

推荐题目

暂无

 洛谷推荐

 复制 Markdown 展开 进入 IDE 模式

题目描述

给定一个正整数 N,然后将 N 分解成 3 个正整数之和,计算出共有多少种符合要求的分解方法。要求:

  1. 分解的 3 个正整数各不相同;
  2. 分解的三个正整数中各个数位都不含数字 3 和 7。

例如:N 为 8,可分解为 (1,1,6)、(1,2,5)、(1,3,4)、(2,2,4)、(2,3,3),其中满足要求的分解方法有 1 种,为 (1,2,5)。

输入格式

输入一个正整数 N(5<N<501),表示要分解的正整数。

输出格式

输出一个整数,表示共有多少种符合要求的分解方法。

输入输出样例

输入 #1复制

8

输出 #1复制

1

#include<bits/stdc++.h>
using namespace std;
bool check(int x) {while(x) {if(x%10==3||x%10==7)return false;x/=10;}return true;
}
int main() {int n,cnt=0;cin>>n;for(int i=1; i<=n; i++) {for(int j=i+1; j<=n; j++) {for(int k=j+1; k<=n; k++) {if(i+j+k==n&&check(i)&&check(j)&&check(k))cnt++;}}}cout<<cnt;return 0;
}

### 题目理解
我们需要将一个给定的正整数N分解成三个不同的正整数的和,且这三个数满足以下条件:
1. 三个数各不相同。
2. 每个数的任何数位上都不包含数字3或7。

### 解决思路
1. **生成所有可能的三元组**:首先,我们需要生成所有可能的三元组(i, j, k),使得i + j + k = N,且i < j < k(这样可以避免重复,因为顺序不重要)。
2. **检查数字的有效性**:对于每个三元组中的数字,检查它们是否不包含数字3或7。
3. **计数有效分解**:统计满足上述所有条件的三元组的数量。

### 具体步骤
1. **遍历所有可能的第一个数i**:i的范围可以从1到N-2(因为至少j和k要比i大,且j和k至少为i+1和i+2)。
2. **对于每个i,遍历可能的第二个数j**:j的范围从i+1到N-i-1(因为k至少要比j大,且k = N - i - j > j)。
3. **计算第三个数k**:k = N - i - j,必须满足k > j。
4. **检查数字的有效性**:对于i, j, k,检查它们的每一位数字是否都不是3或7。
5. **统计有效分解**:如果i, j, k都有效,则计数加1。

### 检查数字的有效性
编写一个辅助函数`is_valid(num)`,检查数字`num`的每一位是否都不包含3或7:
- 将数字转换为字符串,然后检查每一位字符是否不是'3'或'7'。
- 或者,可以逐位提取数字并检查。

### 代码实现
```python
def is_valid(num):
    s = str(num)
    return '3' not in s and '7' not in s

N = int(input())
count = 0

for i in range(1, N // 3 + 1):  # i is the smallest, so at most N//3
    for j in range(i + 1, (N - i) // 2 + 1):  # j is the middle, so at most (N-i)/2
        k = N - i - j
        if k > j and is_valid(i) and is_valid(j) and is_valid(k):
            count += 1

print(count)
```

### 代码解释
1. **is_valid函数**:检查数字是否不包含3或7。
2. **输入N**:读取要分解的正整数。
3. **初始化计数器count**:用于统计有效分解的数量。
4. **双重循环生成三元组**:
   - 外层循环遍历i的可能取值(从1到大约N/3)。
   - 内层循环遍历j的可能取值(从i+1到大约(N-i)/2)。
   - 计算k = N - i - j,并检查k > j。
5. **检查有效性**:如果i, j, k都有效,则计数器加1。
6. **输出结果**:打印满足条件的分解数量。

### 示例验证
以输入N=8为例:
- 可能的分解:
  - i=1, j=2, k=5 → 有效 (1, 2, 5)。
  - i=1, j=3, k=4 → 3和4,3无效。
  - 其他分解要么重复数字,要么包含无效数字。
- 输出1,与示例一致。

### 复杂度分析
- 时间复杂度:O(N²),因为有两重循环,每重循环大约N次。
- 空间复杂度:O(1),只使用了常数空间。

### 优化
- 可以通过预先生成所有有效的数字(不包含3和7的数字)来加速检查,但在这个问题中N不大(<501),直接检查即可。

http://www.dtcms.com/a/320170.html

相关文章:

  • 什么是0.5米分辨率卫星影像数据?
  • 一文学会c++继承 组合
  • [优选算法专题一双指针——两数之和](双指针和哈希表)
  • 解决GitHub push失败-Failed to connect to github.com port 443: Timed out
  • 亚马逊卖家反馈机制变革:纯星级评级时代的合规挑战与运营重构
  • SOMGAN:用自组织映射改善GAN的模式探索能力
  • 自然语言处理×第四卷:文本特征与数据——她开始准备:每一次输入,都是为了更像你地说话
  • python selenium环境安装
  • Python自动化测试selenium指定截图文件名方法
  • MySQL 备份利器 Xtrabackup 全解析:从部署到恢复的实战指南
  • 视觉语言模型的空间推理缺陷——AI 在医学扫描中难以区分左右
  • 《CogAgent: A Visual Language Model for GUI Agents》论文精读笔记
  • Vue 3 入门教程 9 - 表单处理
  • 8、Redis的HyperLogLog、事务Multi、管道Pipeline,以及Redis7.0特性
  • DoubleTrouble靶机
  • 【R语言】重新绘制高清MaxEnt的单因素响应曲线图像
  • 最佳左前缀法则(Optimal Left-Prefix Rule)
  • 【Dijkstra】 Shortest Routes I
  • 5种将Android联系人传输到电脑的方法
  • 《C语言》函数练习题--4
  • Debain12 api方式部署redis服务
  • 【高等数学】第八章 向量代数与空间解析几何——第二节 数量积 向量积 混合积
  • 耐压击穿测试在不同行业中的具体应用有哪些差异?
  • Clock斗篷技术:助力跨境电商营销推广的智慧策略
  • 当文档包含表格时,如何结合大模型和OCR提取数据?
  • C语言指针:补充
  • Day 34:GPU训练与类的call方法
  • [特殊字符] 未来图钉式 AI 时代的智能生态布局:副脑矩阵与人机共振的系统构想
  • USB2.0 和 USB3.0 枚举对比
  • 数据标注之数据集的类型与如何标注