在C 中分配数字
Splitting a number in c++
我必须制作一个程序,该程序执行以下操作:输入应为 n
(n> 1)。如果n = 5,则应发生以下操作:
1 1 1 1 1
1 1 1 2
1 1 2
1 1 3
1 4
2 3
,如您所见,没有相同的两条行,并且顺序是严格的 - 从最低数量到最高。
我有一个代码,在同一情况下,它输出了以下内容:
1 1 1 1 1
2 1 1 1
2 2 1
3 1 1
3 2
4 1
您可以看到订单是反向的,这是意想不到的。我该如何解决?
这是代码:
#include <iostream>
#include <stdio.h>
using namespace std;
unsigned *mp;
void print(unsigned length)
{
unsigned i;
for (i = 1; i < length; i++) printf("%u ", mp[i]);
printf("%un", mp[length]);
}
void devNum(unsigned n, unsigned pos)
{
unsigned k;
for (k = 1; k <= n; k++)
{
if (n != k)
{
mp[pos] = k;
if (mp[pos] <= mp[pos - 1])
{
devNum(n - k, pos + 1);
}
}
else
{
mp[pos] = k;
if (pos > 1 && mp[pos] <= mp[pos - 1]) print(pos);
}
}
}
int main(void)
{
unsigned n;
cin >> n;
mp = new unsigned[n + 1];
mp[0] = n + 1;
devNum(n, 1);
delete[] mp;
return 0;
}
编辑:我重写devNum()
和main()
以适合新规格。请注意,我更改了mp[0]
中填充的值。
void devNum(unsigned n, unsigned pos)
{
for (mp[pos] = mp[pos-1]; mp[pos] <= n; ++mp[pos])
{
if(mp[pos] != n)
{
devNum(n - mp[pos], pos + 1);
}
else
{
if (pos > 1) print(pos);
}
}
}
int main(void)
{
unsigned n;
cin >> n;
mp = new unsigned[n+1];
mp[0] = 1;
devNum(n, 1);
delete [] mp;
return 0;
}
(对于旧规格)
更改
void devNum(unsigned n, unsigned pos)
{
unsigned k;
for (k = n; k >= 1; k--)
/* ... */
进入
void devNum(unsigned n, unsigned pos)
{
unsigned k;
for (k = 1; k <= n; k++)
{
if (n != k)
{
mp[pos] = k;
if (mp[pos] <= mp[pos - 1])
{
devNum(n - k, pos + 1);
}
}
else
{
mp[pos] = k;
if (pos > 1 && mp[pos] <= mp[pos - 1]) print(pos);
}
}
}
请注意,我在调用print()
之前检查pos > 1
以避免单个5
。
要删除固定的MAX
限制,您可以在main()
中动态分配mp
。也就是说,更改
const int MAX = 100;
unsigned mp[MAX + 1];
进入
unsigned *mp;
并将main()
写为
int main(void)
{
unsigned n;
cin >> n;
mp = new unsigned[n+1];
mp[0] = n + 1;
devNum(n, 1);
delete [] mp;
return 0;
}
相关文章:
- 如何在C++中有效地将数字值重新分配给字符数组
- 合并排序C++帮助 为合并的数字动态分配临时数组
- 为无符号字符* 分配一个数字
- 错误:数字常数之前的预期无限制ID:std :: array和std ::向量大小分配
- C 使用转换(绑定)分配数字
- 如何将int分解为数字并以相同的顺序为向量分配数字
- 如何将 int 的数字分配给数组 c++
- 在打印出动态分配的数组中的前两个数字时遇到问题,其他数字工作正常
- 如何在 matr 内按一定百分比随机分配数字
- 如何在c++中为数据中的特定数字分配字母
- 每个呼叫都会生成不同数字的函数:我应该通过引擎,分配还是两者兼而有之
- 在C 中分配数字
- 如何有效地将数字字符串值分配给整数
- 有没有办法在不分配变量的情况下将字符串连接到数字
- 现在允许为 std::string 分配一个数字
- C++如何从文件中读取数字并将其分配到数组中的相应位置
- 如何将ascii数字转换为适当的字符并将其分配给字符串
- 使用指针为文件C++中的数字动态分配存储
- 如何为以下字符分配数字 "@" 或 "#" 或 "^" 和 "*"
- 如果将数字分配给不带后缀的长类型,是否会发生类型转换"L"