| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5712 人关注过本帖
标题:C语言怎么实现如下编程,谢谢: 1,2,3,4,5,6,7,8,9共9个数组成3个分数,每个 ...
只看楼主 加入收藏
wangweiwei22
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2015-8-23
结帖率:0
收藏
已结贴  问题点数:20 回复次数:7 
C语言怎么实现如下编程,谢谢: 1,2,3,4,5,6,7,8,9共9个数组成3个分数,每个数不重复使用,且分母均为两位数分子均为一位数,两个分数相加等于第三个
C语言怎么实现如下编程,谢谢: 1,2,3,4,5,6,7,8,9共9个数组成3个分数,每个数不重复使用,且分母均为两位数分子均为一位数,两个分数相加等于第三个分数,求出所有的组合
搜索更多相关主题的帖子: C语言 
2015-08-23 10:40
li362490567
Rank: 1
等 级:新手上路
帖 子:89
专家分:8
注 册:2015-7-9
收藏
得分:4 
不会,同求
2015-08-23 17:06
hjx1120
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:李掌柜
等 级:贵宾
威 望:41
帖 子:1314
专家分:6927
注 册:2008-1-3
收藏
得分:4 
可做参考
图片附件: 游客没有浏览图片的权限,请 登录注册

2015-08-23 17:20
wangweiwei22
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2015-8-23
收藏
得分:0 
回复 3楼 hjx1120
循环次数会不会太多,9重循环
2015-08-23 23:20
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:4 
这个题目有点费脑,有个疑问:因为是分数,怎么判断相等?浮点数只能判断出大于或小于,很难做到等于的判断,题意是不是还指出了整除?如果是整除,则算法完全不同的。

能编个毛线衣吗?
2015-08-24 09:14
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:4 
1/26 + 5/78 = 4/39
1/32 + 5/96 = 7/84
1/32 + 7/96 = 5/48
1/78 + 4/39 = 6/52
1/96 + 7/48 = 5/32
2/68 + 9/34 = 5/17
2/68 + 9/51 = 7/34
4/39 + 1/78 = 6/52
4/56 + 7/98 = 3/21
5/26 + 9/78 = 4/13
5/78 + 1/26 = 4/39
5/96 + 1/32 = 7/84
6/34 + 8/51 = 9/27
7/48 + 1/96 = 5/32
7/96 + 1/32 = 5/48
7/98 + 4/56 = 3/21
8/51 + 6/34 = 9/27
9/34 + 2/68 = 5/17
9/51 + 2/68 = 7/34
9/78 + 5/26 = 4/13

如果用C++的话,因为有 std::next_permutation,所以很简单
#include <cstdio>
#include <algorithm>

int main( void )
{
    unsigned n[] = { 1,2,3,4,5,6,7,8,9 };

    do {
        unsigned a = n[0];
        unsigned b = n[1]*10+n[2];
        unsigned c = n[3];
        unsigned d = n[4]*10+n[5];
        unsigned e = n[6];
        unsigned f = n[7]*10+n[8];
        if( a*d*f+b*c*f == b*d*e )
            printf( "%d/%d + %d/%d = %d/%d\n", a,b,c,d,e,f );
    }
    while( std::next_permutation(n,n+sizeof(n)/sizeof(n[0])) );

    return 0;
}

如果是C的话,就得自己写了
程序代码:
#include <stdio.h>
#include <string.h>

int main( void )
{
    for( unsigned n=0; n!=9*8*7*6*5*4*3*2*1; ++n )
    {
        unsigned t, m[] = { 1,2,3,4,5,6,7,8,9 };

        t = n/(8*7*6*5*4*3*2*1)%9;
        unsigned a  = m[t];
        memcpy( m+t, m+t+1, (8-t)*sizeof(unsigned) );

        t = n/(7*6*5*4*3*2*1)%8;
        unsigned b  = m[t];
        memcpy( m+t, m+t+1, (7-t)*sizeof(unsigned) );

        t = n/(6*5*4*3*2*1)%7;
        unsigned c  = m[t];
        memcpy( m+t, m+t+1, (6-t)*sizeof(unsigned) );

        t = n/(5*4*3*2*1)%6;
        unsigned d  = m[t];
        memcpy( m+t, m+t+1, (5-t)*sizeof(unsigned) );

        t = n/(4*3*2*1)%5;
        unsigned e  = m[t];
        memcpy( m+t, m+t+1, (4-t)*sizeof(unsigned) );

        t = n/(3*2*1)%4;
        unsigned f  = m[t];
        memcpy( m+t, m+t+1, (3-t)*sizeof(unsigned) );

        t = n/(2*1)%3;
        unsigned g  = m[t];
        memcpy( m+t, m+t+1, (2-t)*sizeof(unsigned) );

        t = n/(1)%2;
        unsigned h  = m[t];
        memcpy( m+t, m+t+1, (1-t)*sizeof(unsigned) );

        unsigned i  = m[0];

        if( a*(e*10+f)*(h*10+i) + d*(b*10+c)*(h*10+i) == g*(b*10+c)*(e*10+f) )
            printf( "%d/%d%d + %d/%d%d = %d/%d%d\n", a,b,c,d,e,f,g,h,i );
    }

    return 0;
}


2015-08-24 09:38
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
回复 6楼 rjsp
错看成分子两位数,分母1位数了。刚百度了next_permutation函数,厉害,不用自己写排列组合!

[ 本帖最后由 wmf2014 于 2015-8-24 10:07 编辑 ]

能编个毛线衣吗?
2015-08-24 09:50
moc
Rank: 2
等 级:论坛游民
帖 子:5
专家分:12
注 册:2015-8-20
收藏
得分:4 
图片附件: 游客没有浏览图片的权限,请 登录注册


遍历出来的,遍历次数 9!。
2015-08-24 16:17
快速回复:C语言怎么实现如下编程,谢谢: 1,2,3,4,5,6,7,8,9共9个数组成3个分数 ...
数据加载中...
 
   



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

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