| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4433 人关注过本帖
标题:这题是用动态规划来做么?
只看楼主 加入收藏
令狐少侠56
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:320
专家分:175
注 册:2014-4-10
结帖率:58.18%
收藏
已结贴  问题点数:20 回复次数:14 
这题是用动态规划来做么?
5.public void printFactors(int n)
example:
input:12
output:
1 * 12
2 * 6
2 * 2 * 3
3 * 4

input:24
output:
1 * 32
2 * 16
2 * 2 * 8
2 * 2 * 2 * 4
2 * 2 * 2 * 2 * 2
2 * 4 * 4
4 * 8
搜索更多相关主题的帖子: example 动态 
2016-02-19 20:52
林月儿
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:7 
应该是

剑栈风樯各苦辛,别时冰雪到时春
2016-02-19 21:39
令狐少侠56
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:320
专家分:175
注 册:2014-4-10
收藏
得分:0 
回复 2楼 林月儿
我看着像因子分解那个题,可是函数写不出来。
2016-02-19 21:57
拉链
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:107
专家分:534
注 册:2016-1-22
收藏
得分:7 
这就是一个递归因数分解,不需要动态规划。
2016-02-20 10:21
令狐少侠56
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:320
专家分:175
注 册:2014-4-10
收藏
得分:0 
回复 4楼 拉链
这个我之前也是这样想的,可代码感觉写不出来。
输出的规律可能不是递归的那种
2016-02-20 12:58
拉链
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:107
专家分:534
注 册:2016-1-22
收藏
得分:0 
弄了个练手,递归的,请参考提宝贵意见:
程序代码:
#include <stdio.h>
void ff(int a[],int n,int p)
{   //递归显示所有因数分解算式
    int i;
    i=p>0?1:0;  //第一次显示因数1
    for(;i<p;i++)printf("%d * ",a[i]);
    printf("%d * %d\n",a[i],n);   //显示算式
    if(a[p]*a[p]>n)return;
    for(i=2;i*i<=n;i++)
    {
        if(!(n%i))
        {
            a[++p]=i;     //存储因数
            ff(a,n/i,p);  //递归调用
            p--;          //回溯,剪枝
        }
    }
}
void main()
{
    int n,a[100];
    scanf("%d",&n);
    a[0]=1;
    ff(a,n,0);
}
2016-02-20 21:56
令狐少侠56
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:320
专家分:175
注 册:2014-4-10
收藏
得分:0 
回复 6楼 拉链
对回溯剪枝不了解啊,能说明一下吗?
我正在看代码怎么运行的
2016-02-21 11:25
拉链
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:107
专家分:534
注 册:2016-1-22
收藏
得分:0 
道理很简单:我用一个数组存储组成算式的因子,随着递归深度加深,因子增多,p值增大,直到出现重复分解退出递归,递归退出后进入for循环尝试下一个因子,此时必须恢复p递归前的值,放弃旧因子分支,进入下一个因子分支。

[此贴子已经被作者于2016-2-21 12:14编辑过]

2016-02-21 12:13
令狐少侠56
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:320
专家分:175
注 册:2014-4-10
收藏
得分:0 
回复 8楼 拉链
我把你的代码运行过程大致在纸上画了一下,然后我觉得i=p>0?1:0;  这条语句挺难想到的。
    i=p>0?1:0;  //第一次显示因数1
    for(;i<p;i++)printf("%d * ",a[i]);
    printf("%d * %d\n",a[i],n);   //显示算式

你写出代码用了多长时间啊
2016-02-21 16:35
令狐少侠56
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:320
专家分:175
注 册:2014-4-10
收藏
得分:0 
回复 8楼 拉链
你有画图什么的辅助分析么??
2016-02-21 17:01
快速回复:这题是用动态规划来做么?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027593 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved