社区
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算一种情况
小弟在此谢过!!!!
...全文
195
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
求救
信号通讯系统.zip
# 基于摩斯电码的
SOS
求救
信号通讯系统 ## 项目简介
SOS
摩斯通讯系统是一个简单而高效的基于摩斯电码发送
SOS
求救
信号的通信系统。它通过一系列的点击模拟摩斯电码的传递方式,提供了一条关键的
求救
通道,特别适合在某些特定场合(如灾难救援)进行紧急通讯。 ## 项目的主要特性和功能 1. 模拟摩斯电码传输系统可以模拟真实的摩斯电码传输过程,使得用户能够通过敲击模拟
SOS
信号。 2. 简单易用无需复杂的设备或技术知识,任何用户都能轻松使用本系统进行通讯。 3. 高可靠性与效率
SOS
摩斯通讯系统确保信息在最短时间内成功传递出去,提高紧急救援的效率。 ## 安装使用步骤 假设用户已经下载了本项目的源码文件,按照以下步骤进行安装和使用 ### 步骤一解压文件并配置环境 打开源码文件所在的文件夹,确保所有依赖项都已正确安装。对于本项目的运行环境没有特别要求,只要是一台可以运行操作系统的计算机即可。 ### 步骤二运行系统文件
自己写的手电筒含有
SOS
功能
逼真的手电筒,含有闪光灯,实用小巧。同时可以对源码进行适度修改。里面放置了针对不同手机屏幕的资源文件。
酒店客房
SOS
紧急
求救
系统设计方案2.doc
酒店客房
SOS
紧急
求救
系统设计方案2.doc
酒店客房
SOS
紧急
求救
系统设计方案及对策.doc
酒店客房
SOS
紧急
求救
系统设计方案及对策.doc
C语言
70,022
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章