当前位置: 首页 > 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.xdnf.cn/news/1256833.html

相关文章:

  • Windows Oracle 11 g dmp数据库恢复笔记
  • java excel转图片常用的几种方法
  • [论文阅读] 软件工程 | 软件工程中的同理心:表现、动机与影响因素解析
  • 微信小程序与后台管理系统开发全流程指南
  • 单链表专题---暴力算法美学(1)(有视频演示)
  • 【性能测试】---测试工具篇(jmeter)
  • 超声波自动气象站如何精准预警极端天气
  • 深入解析 Dash 中的 dcc.Checklist:构建高效多选交互界面
  • 【LeetCode】set和map相关算法题 前K个高频单词、随机链表的复制、两个数组的交集、环形链表
  • 视觉语言模型的空间推理缺陷——AI 在医学扫描中难以区分左右
  • 生成式AI时代,Data+AI下一代数智平台建设指南
  • 8.3.1 注册服务中心Etcd
  • 商城小程序怎么做?如何开发母婴用品商城小程序?
  • [C++20]协程:语义、调度与异步 | Reactor 模式
  • NVIDIA/k8s-device-plugin仓库中GPU无法识别问题的issues分析报告
  • LoRaWAN的网络拓扑
  • mapbox进阶,mapbox-gl-draw绘图插件扩展,绘制新增、编辑模式支持点、线、面的捕捉
  • 【已解决】-bash: mvn: command not found
  • PyTorch LSTM文本生成
  • 专题:2025财务转型与AI赋能数字化报告|附30+份报告PDF汇总下载
  • Casrel关系抽取
  • 【2025最新】在 macOS 上构建 Flutter iOS 应用
  • 关于时钟门控ICG的一切(与门及或门门控)
  • 紫光同创Logos2+RK3568JHF开发板:国产异构计算平台的破局者
  • Mongodb常用命令简介
  • 将Excel数据导入SQL Server数据库,并更新源表数据
  • 超全的软件测试项目平台,10多个项目部署在线上环境,浏览器直接访问
  • 树莓派安装OpenCV环境
  • 8、Redis的HyperLogLog、事务Multi、管道Pipeline,以及Redis7.0特性
  • STM32 HAL库外设编程学习笔记