社区
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算一种情况
小弟在此谢过!!!!
...全文
223
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写文章
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
打赏
举报
回复
可以考虑递归
【Arduino】入门篇——
SOS
求救
信号器
本文介绍了一项使用Arduino UNO控制器模拟
SOS
求救
信号灯的实验。通过控制三个LED小灯泡的不同频闪,实现了
SOS
信号灯的闪烁频率。文章详细描述了实验所需的材料、电路连接方式、代码编写及实验效果。
Mixly——
SOS
求救
装置
本文详细解析了一个用于Arduino平台的
SOS
求救
装置代码,该装置通过控制LED灯发出
SOS
信号。代码中使用了delay函数和digitalWrite函数来实现信号的精确控制,通过循环和条件语句实现了
SOS
信号的连续发送。
(Arduino)蓝牙和 APPinventor实现一键
SOS
求救
(一)
本文介绍使用Arduino、蓝牙及APPinventor实现一键
SOS
求救
功能,详细讲解硬件连接、Arduino代码及APP端设置,确保手机能自动拨打电话。
关于app inventor跨界面连接蓝牙并且一键
SOS
拨打电话
求救
(三)
本文介绍了一个使用Arduino和蓝牙实现一键
SOS
求救
功能的项目。通过修改延时和按键状态读取,实现了多屏幕间的蓝牙连接及
求救
信号发送。详细展示了Arduino代码和App Inventor代码块。
小智音箱
SOS
语音
求救
联动定位上报
本文深入解析小智音箱的
SOS
语音
求救
系统,涵盖低功耗关键词检测、意图识别、多源融合室内定位及安全通信链路设计。系统通过端侧AI实现高灵敏度与低误报率,在无GPS环境下利用Wi-Fi RTT、蓝牙AoA和PDR技术实现3米内精确定位,并通过加密传输与多重通知保障紧急信息可靠送达。
C语言
70,038
社区成员
243,245
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章