| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4060 人关注过本帖
标题:练习题 5
只看楼主 加入收藏
西元前的D调
Rank: 2
等 级:论坛游民
帖 子:15
专家分:78
注 册:2011-6-20
收藏
得分:2 
路过,膜拜9楼。。。
2011-06-26 14:52
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:2 
程序代码:
#include <stdio.h>
#define get(value, digit) ((value) / (digit) % 10)

int main(void) {
    int i, one, ten, hundred;
    for(i = 100; i < 1000; i++) {
        one = get(i, 1);
        ten = get(i, 10);
        hundred = get(i, 100);
        if(one > hundred && hundred > ten && (one + ten + hundred) == (one * ten * hundred))
            break;
    }
    printf("%d\n", i);
    return 0;
}
/* Output:
213

Process returned 0 (0x0)   execution time : 0.016 s
Press any key to continue.
*/

My life is brilliant
2011-06-26 15:15
liuting8181
Rank: 2
等 级:论坛游民
帖 子:54
专家分:19
注 册:2011-4-21
收藏
得分:2 
楼主,你“且个位数字之和等于个位数字之积” 是想说 百十个位的和等于其积?
2011-06-26 15:25
小鱼儿c
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:852
专家分:1317
注 册:2011-4-1
收藏
得分:2 
程序代码:
/* Note:Your choice is C IDE */
#include "stdio.h"
#include "stdlib.h"
int main()
{int g_n,b_n,s_n;
    int sum,ji;
    for(g_n=2;;g_n++)
    for(b_n=1;b_n<g_n;b_n++)
    for(s_n=0;s_n<b_n;s_n++)
    {sum=g_n+b_n+s_n;
        ji=g_n*b_n*s_n;
        if(sum==ji)
        {printf("这个数是%d%d%d\n",b_n,s_n,g_n);
        system("pause");
        exit(0);
        return 1;
        }
    }

    return 0;
}
没有考虑效率

用心做一件事情就这么简单
2011-06-26 15:30
爱编程的艾
Rank: 2
等 级:论坛游民
帖 子:19
专家分:38
注 册:2011-4-16
收藏
得分:2 
int a,b,c;
for(b=0;b<10;b++)
for(a=b+1;a<10;a++)
for(c=a+1;c<10;c++)
if(a*b*c==a+b+c)
cout<<a<<b<<c;
2011-06-26 16:20
Redlass
Rank: 2
等 级:论坛游民
帖 子:20
专家分:29
注 册:2011-6-24
收藏
得分:2 
程序代码:
#include <stdio.h>
int main()
{
    int a,b,c,i;
    for( b = 0;b < 10;b++)
    for( a = b + 1;a < 10;a++)
    for( c = a + 1;c < 10;c++)
    if( a + b + c == a * b * c)
    {
     i = a * 100 + b * 10 + c;
     printf("符合题意数:\n%d\n",i);
    }
    getch();
    return 0;
}


[ 本帖最后由 Redlass 于 2011-6-26 19:26 编辑 ]
2011-06-26 18:27
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:2 
可以分析分析问题,再编程。

这数根本的性质是这个数各个数位的积等于各个数位的和。这暗示三个位上的数均不为0。
很容易想像,一般来说三个数的积要比三个数的和大不少。要以此为突破口。

三个数的最大的和是 7+8+9 = 24。
于是任何三位的积大于 24 的数肯定不合要求。

另外,十位数最小,百位次之,个位最大的要求表明,个位数最小也得是3。
此时这个数唯一,是 213。它正好满足 2*1*3 = 2+1+3 = 6。这是一个解。

否则个位数最小为 4,组合只有:214,314,324。
个位数为 5 时,百位与十位的积不能超过 4,否则总乘积超过 24。满足的只有 215, 315, 415。
个位数为 6 时,百位与十位的积不能超过 4。只有 216, 316, 416。
个位数为 7 时,百位与十位的积不能超过 3。只有 217, 317。
个位数为 8 时,百位与十位的积不能超过 3。只有 218, 318。
个位数为 9 时,百位与十位的积不能超过 2。只有 219。

可能的结果只能在这16个数里诞生。先再草稿纸上算一下,再编程的话,程序也许就是这样:
程序代码:
#include <stdio.h>

int main()
{
    printf("213\n");

    return 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 if (h*t*o == h+t+o) printf("%d%d%d\n", h, t, o);
    }

    return 0;
}


[ 本帖最后由 pangding 于 2011-6-26 20:12 编辑 ]
2011-06-26 20:10
枯叶蝴蝶
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:48
专家分:133
注 册:2011-6-17
收藏
得分:2 
好像又学到了点东西
2011-06-26 23:17
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
收藏
得分:2 
来凑个热闹,代码就不贴了。

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2011-06-26 23:21
xiangqiu1986
Rank: 2
等 级:论坛游民
帖 子:79
专家分:95
注 册:2011-5-5
收藏
得分:2 
“且个位数字之和等于个位数字之积”?是“个位数等于百位、十位、个位之积”吗?

学无止境!
2011-06-27 00:05
快速回复:练习题 5
数据加载中...
 
   



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

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