社区
C语言
帖子详情
SOS求救~~~~~~~
xiaogang198412
2005-04-23 03:17:20
呼叫各位大侠,求解一道编成题目(什么语言版本都成(b,p,c))
题目:拆分给出的自然数,把所有情况都打印出来,不能重复。
例如输入:4
输出:4=1+1+1+1
4=1+1+2
4=1+3
4=2+2
4=4
ps.4=1+1+2 与4=1+2+1算一种情况
小弟在此谢过!!!!
...全文
194
11
打赏
收藏
SOS求救~~~~~~~
呼叫各位大侠,求解一道编成题目(什么语言版本都成(b,p,c)) 题目:拆分给出的自然数,把所有情况都打印出来,不能重复。 例如输入:4 输出:4=1+1+1+1 4=1+1+2 4=1+3 4=2+2 4=4 ps.4=1+1+2 与4=1+2+1算一种情况 小弟在此谢过!!!!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
augljyy
2005-04-26
打赏
举报
回复
#include "stdio.h"
void num(int number,int i)
{
int k,n=number;
while(n>i)
{
n=n-i;
if((n+i)!=number)
{
for(k=0;number-k>n;k=k+i)
printf("%d+",i);
printf("%d\n",n);
}
else
printf("%d+%d\n",i,n);
}
}
void main()
{
int j,m;
printf("input:");
scanf("%d",&m);
for(j=1;j<=m/2;j++)
num(m,j);
} 看这个行不?
zhangfjj
2005-04-26
打赏
举报
回复
查了些资料
/*此题其实就是求方程
n=x1+x2+...+xk的不重复正整数解(1<=k<=n)
如:
4=4
4=1+3=2+2=3+1
4=1+1+2=1+2+1=2+1+1
4=1+1+1+1
上面有重复的,仔细观察,由于对称性,所以
把其中非递减或非递增的取出就行了
对要分解的数i,可分解出来的数j共有i种可能选择,它们分别是:i,i-1,...,2,1。
但是为了保证分解出来的和数依次构成不增的正整数数列,则要求从i分解出来的和数j不
能超过a[k-1]。为了保证上述要求对第一步(k=1)分解也成立,程序可以在a[0]中预置n,
即第一个和数最大为n。
2)在分解过程中,当分解出来的数j=i时,说明已完成一个完整的和式分解,应该将和
式输出;当分解出来的数j和数。
这里取的是非递增解*/
#include <iostream>
using namespace std;
void f(int,int,int *);
int main()
{
system("cls");
int num;
int *sum;
cout<<"请输入一个整数:";
cin>>num;
sum=new int[num];//分解的最多个数是num个1,所以申请num长度的整型数组
sum[0]=num;
f(num,1,sum);
system("pause");
delete []sum;
return 0;
}
void f(int num,int n,int sum[])
{
for(int j=num;j>=1;j--)
{
if(j<=sum[n-1])
{
sum[n]=j;
if(j==num)//分解结束
{
cout<<sum[0]<<"="<<sum[1];
for(int i=2;i<=n;i++)
cout<<"+"<<sum[i];
cout<<endl;
}
else
f(num-j,n+1,sum);
}
}
}
zhangfjj
2005-04-23
打赏
举报
回复
楼上用递归的方法,我也想到了,但没有包含
4=2+2的这种情况。
如果前头这个数字较大时
如10=...那就少了很多哟
zhangfjj
2005-04-23
打赏
举报
回复
想了半天,原来是要用计算数学中差分方法来求,请看这个东西
http://zyk1.zyjjw.com.cn/RESOURCE/CZ/CZSX/SXBL/SXTS1037/2900_SR.HTM
最下面的东东!
blackmouth
2005-04-23
打赏
举报
回复
对于任意大于1的整数n都可以拆分为1和n-1 所以用递归如下:
void devide(int n,vector<int> record)
{
if(n==1)
return;
record.pop_back();
record.push_back(1);
record.push_back(n-1);
把record里面的元素全部打印成一行;
devide(n-1,record);
}
例如如果输入为4,即调用devide(4,record)
则输出:
1 3
1 1 2
1 1 1 1
注明:
调用devide(4,record)之前要对record初始化,让他含有一个任意的整数;
至于如何把record里面的元素全部打印成一行如果还不清楚可以查看C++里面vector的操作
zhangfjj
2005-04-23
打赏
举报
回复
上面还不行,改进了一下!大家看看行不行了?
不过,好象无法去掉重复的和式哟!
比如5,把它分成一棵二叉树,这样的
5
/ \
1 4
/ \
1 3
/ \
1 2
/ \
1 1
这样,就可以给出分解,
0层 5=5
1层 5=1+4
2层
取前1个叶结点之和与后面各项相加 5=1+1+3
取前2个叶结点之和与后面各项相加 5=2+3
3层
取前1个叶结点之和与后面各项相加 5=1+1+1+2
取前2个叶结点之和与后面各项相加 5=2+1+2
取前3个叶结点之和与后面各项相加 5=3+2
4层
取前1个叶结点之和与后面各项相加 5=1+1+1+1+1
取前2个叶结点之和与后面各项相加 5=2+1+1+1
取前3个叶结点之和与后面各项相加 5=3+1+1
取前4个叶结点之和与后面各项相加 5=4+1
即对于任意一个自然数,可分解的种数为它的树的层数
每种分解法,为其该层所有结点再加上上一层的叶结点之和。
对于你的4来说
4
/ \
1 3
/ \
1 2
/ \
1 1
即
0层 4=4
1层 4=1+3
2层
取前1个叶结点之和与后面各项相加 4=1+1+2
取前2个叶结点之和与后面各项相加 4=2+2
3层
取前1个叶结点之和与后面各项相加 4=1+1+1+1
取前2个叶结点之和与后面各项相加 4=2+1+1
取前3个叶结点之和与后面各项相加 4=3+1
注:取叶结点数由层数控制。
zhangfjj
2005-04-23
打赏
举报
回复
对于你的4来说
4
/ \
1 3
/ \
1 2
/ \
1 1
即4=1+3
4=1+1+2
4=1+1+1+1
zhangfjj
2005-04-23
打赏
举报
回复
算法想清楚了
比如5,把它分成一棵二叉树,这样的
5
/ \
1 4
/ \
1 3
/ \
1 2
/ \
1 1
这样,就可以给出分解,且不重复了
5=1+4
5=1+1+3
5=1+1+1+2
5=1+1+1+1+1
即对于任意一个自然数,可分解的种数为它的树的层数
每种分解法,为其该层所有结点再加上上一层的叶结点之和。
xiaogang198412
2005-04-23
打赏
举报
回复
我想了半天想不出算法来,各位能否提供一个好的算法?
小弟在此谢过了
dongyuanzhang
2005-04-23
打赏
举报
回复
网上这个题目的答案太多了,自己搜一搜啊!
这个题对锻炼自己的能力思想很有好处 。
277894613
2005-04-23
打赏
举报
回复
可以考虑递归
SOS
求救
信号器应用开发.pptx
SOS
求救
信号器应用开发 嵌入式系统应用(龙芯版)中,
SOS
求救
信号器是一种非常重要的应用,通过控制信号灯闪烁间隔,实现
SOS
信号的发送。下面将详细介绍
SOS
求救
信号器的应用开发过程。 首先,
SOS
求救
信号器原理是...
(源码)基于摩斯电码的
SOS
求救
信号通讯系统.zip
# 基于摩斯电码的
SOS
求救
信号通讯系统 ## 项目简介
SOS
摩斯通讯系统是一个简单而高效的基于摩斯电码发送
SOS
求救
信号的通信系统。它通过一系列的点击模拟摩斯电码的传递方式,提供了一条关键的
求救
通道,特别适合在...
自己写的手电筒含有
SOS
功能
总的来说,这个手电筒应用不仅提供基本的照明服务,还有实用的
SOS
求救
功能,同时允许用户根据个人需求修改源代码。其背后涉及的知识点包括但不限于: 1. Android应用开发:使用Java或Kotlin语言编写,遵循Android ...
酒店客房
SOS
紧急
求救
系统设计方案2.doc
"酒店客房
SOS
紧急
求救
系统设计方案" 系统概述 酒店客房
SOS
紧急
求救
系统是为了体现以人为本,更为人性化服务的理念。在当今许多高级酒店宾馆采用越来越方便快捷的智能电子服务设施,是当今的一个大趋势。本系统涵盖...
酒店客房
SOS
紧急
求救
系统设计方案及对策.doc
酒店客房
SOS
紧急
求救
系统是一种重要的安全设施,旨在为入住宾客在遭遇紧急情况时提供快速、有效的求助途径。本文将详细介绍该系统的方案设计、架构、性能特点以及适用范围。 系统设计方面,WP-99EM酒店
SOS
紧急
求救
...
C语言
70,022
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章