| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4060 人关注过本帖
标题:练习题 5
只看楼主 加入收藏
fragileeye
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:107
专家分:387
注 册:2011-5-21
收藏
得分:2 
17说的对,思考比写代码更有锻炼的价值。
2011-06-27 00:09
xiangqiu1986
Rank: 2
等 级:论坛游民
帖 子:79
专家分:95
注 册:2011-5-5
收藏
得分:0 
#include <stdio.h>
void main()
{int i,j,k,m,n,x,s=0;
for(i=2;i<=9;i++)
for(j=1;j<=9;j++)
for(k=3;k<=9;k++)
{m=i+j+k;
n=i*j*k;
x=100*i+10*j+k;
if(m==n)
{++s;
printf("%d ",x);
if(s%10==0) printf("\n");}
}
}
献丑了!

学无止境!
2011-06-27 00:28
xiangqiu1986
Rank: 2
等 级:论坛游民
帖 子:79
专家分:95
注 册:2011-5-5
收藏
得分:0 
17楼分析的真好!

学无止境!
2011-06-27 00:29
xiangqiu1986
Rank: 2
等 级:论坛游民
帖 子:79
专家分:95
注 册:2011-5-5
收藏
得分:0 
这真是个好活动,楼主真棒!希望高手们多出点练习,让我们新手有多点锻炼的机会!

学无止境!
2011-06-27 00:33
韩54521风
Rank: 4
等 级:业余侠客
帖 子:75
专家分:212
注 册:2011-6-11
收藏
得分:2 
#include"stdio.h"
main()
{
    int i,j,k,s;
    for(i=1;i<=9;i++)
        for(j=0;j<=9;j++)
            for(k=0;k<=9;k++)
            {
                if(k>i&&i>j&&i+j+k==i*j*k)
                    s=i*100+j*10+k;
            }
            printf("%d是所求三位数\n",s);
}
2011-06-27 09:29
韩54521风
Rank: 4
等 级:业余侠客
帖 子:75
专家分:212
注 册:2011-6-11
收藏
得分:0 
菜鸟发表一下自己的看法,看过这些之后觉得十七楼的分析很经典,但是有点麻烦了,我觉得应该用电脑运算快的优点,把全部三位数全部列举,然后通过条件筛选
觉得七楼的最帅,让人有一种兴奋的感觉(至少对我这菜鸟来说是的,毕竟原来不会这个方法的,现在学到一个新的嘛),个人意见,如果不对,多多指教。。。
2011-06-27 09:41
Begin2011
Rank: 2
等 级:论坛游民
帖 子:60
专家分:61
注 册:2011-6-7
收藏
得分:2 
“且个位数字之和等于个位数字之积”这句话我表示真的没有看懂..........
2011-06-27 10:50
q279838089
Rank: 2
等 级:论坛游民
帖 子:16
专家分:21
注 册:2011-6-22
收藏
得分:2 
#include <stdio.h>
void main()
{
int g,s,b;
for(g=2;g<10;g++)
for(s=0;s<10;s++)
for(b=1;b<10;b++)
    if(g>b)
        if(b>s)
            if(g+s+b==g*s*b)
                printf("%d\n",g+s*10+b*100);
}
答案213,但看了17楼的,没考虑到都不能为0咯,看来我的效率还是低了


[ 本帖最后由 q279838089 于 2011-6-27 11:15 编辑 ]
2011-06-27 11:03
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
其实大家可能还是没能看出程序的效率,虽然看上去都是三重循环,但差别还是挺大的。
大家可以把代码改成:
程序代码:
#include <stdio.h>

int main()
{
    int o, t, h;    // 分别代表个位,十位,百位

    for (o = 3; o <= 9; o++)
    for (t = 1; t < o; t++)
    for (h = t+1; h < o; h++)
    {
        if (h*t*o > 24) break;    // 不用继续加h了,直接跳去加t。
        else printf("%d%d%d\n", h, t, o);  // 无论三七二十一都打印。
    }

    return 0;
}

就可以看到我的代码其实只检验了很少的一些数。
像这类搜索问题,要找一个很容易判断的条件来筛去极大量的数据一般来说是很难的。当然这个题比较容易就是了,只是我当时解释的啰嗦了点。

另外就是说电脑快就不用优化,这个显然不是编程之道,要不然人还研究算法有什么意思。优化工作一定要作,只是应该做在刃上。就是说应该用最小的工作量,达到最好的优化效果。
2011-06-27 11:38
njkido
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:224
专家分:1184
注 册:2011-3-8
收藏
得分:2 
不加先验信息的话

9L的程序时间效率最高

再省点空间 int换成unsigned char   省9个byte
2011-06-27 11:56
快速回复:练习题 5
数据加载中...
 
   



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

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