自然数的拆分

简介: 自然数的拆分

自然数的拆

这是我们进来训练的一个题目,感觉特别有意思,就写下来了题解。

#include <iostream>
using namespace std;
const int N = 1e6 + 10;
int a[N];
int n;
void sdf(int x,int y) {//x表示第几个盒子 y代表当前数字还剩多少
  if (y == 0&&x>2) {//到达目的地的判断条件
    cout << n << "=";
    for (int i = 1; i <x-1 ; i++) {
      cout << a[i] << "+";
    }
    cout << a[x - 1] << endl;//由于最后没有+,所以最后一个数字要单独输出
  }
  for (int i = 1; i <= y; i++) {
    if (i >= a[x - 1]) {//后面的数字大于等于前面的数字
      a[x] = i;
      y = y - i;//每次拆分都让y-i
      sdf(x + 1, y);
      a[x] = 0;//以下两步是回溯,也就是恢复原样
      y = y + i;
    }
  }
}
int main() {
  cin >> n;
  a[0] = 1;
  sdf(1, n);
  return 0;
}


相关文章
|
6月前
|
算法 前端开发
拆分数位后四位数字的最小和
拆分数位后四位数字的最小和
47 0
|
3月前
|
算法 C++
P2404 自然数的拆分问题(DFS)
这篇文章提供了解决自然数拆分问题的深度优先搜索(DFS)算法,包括C++实现代码,用于输出一个自然数拆分为小于等于自身且按字典序排列的所有可能序列。
|
6月前
等差素数列
等差素数列
34 0
|
6月前
数位拆分.
该内容描述了一个编程任务:输入一个4位正整数n(如4321),将其拆分成两个2位正整数a和b(如43和21)。文中附有两张图片示例,但因格式限制无法显示。
58 1
|
6月前
自然数的拆分问题
自然数的拆分问题
30 0
|
6月前
|
自然语言处理
leetcode-140:单词拆分 II
leetcode-140:单词拆分 II
45 0
|
6月前
|
人工智能 BI
leetcod-561:数组拆分 I
leetcod-561:数组拆分 I
47 0
|
算法
【学会动态规划】单词拆分(24)
【学会动态规划】单词拆分(24)
44 0
【Leetcode -205.同构字符串 -228.汇总区间】
【Leetcode -205.同构字符串 -228.汇总区间】
26 0
|
算法 Java C++
leetcode单词拆分
leetcode单词拆分