| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 742 人关注过本帖, 1 人收藏
标题:有一道题,求思路
只看楼主 加入收藏
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:0 
可是如果只遍历的话,那也太繁琐了,要对每个方框都遍历啊

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2012-12-13 19:40
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
回复 楼主 _peak
其实也不慢啊


[fly]存在即是合理[/fly]
2012-12-13 21:15
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
我的图。。。。。


刚刚遍历是 0.233s


[fly]存在即是合理[/fly]
2012-12-13 21:16
浅水无殇
Rank: 2
等 级:论坛游民
帖 子:123
专家分:75
注 册:2012-11-23
收藏
得分:0 
刚刚谁说STL里面的一个字典序的函数next_permutation更方便一点...只要用一个函数把所有的情况都列举出来了,你可以查一下



wula wual
2012-12-13 23:07
_peak
Rank: 5Rank: 5
来 自:90后
等 级:禁止访问
帖 子:83
专家分:347
注 册:2012-12-12
收藏
得分:0 
还没有人会啊

团结,进步,务实,创新!
2012-12-15 08:56
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:20 
程序代码:
#include <stdio.h>

void Swap(int* p1, int* p2)
{
    int tmp = *p1; *p1 = *p2; *p2 = tmp;
}

void Reverse(int* start, int* end)
{
    while (start < end)
        Swap(start++, --end);
}

int NextPermutation(int* start, int* end)
{
    int* p, *sp = end - 2;
    if (start >= end - 1)
        return 0;
    while (sp >= start) {
        if (sp[0] < sp[1])
            break;
        --sp;
    }
    if (sp < start) {
        Reverse(start, end);
        return 0;
    }
    for (p = end - 1; p > sp; --p)
        if (*p > *sp) {
            Swap(sp, p);
            break;
        }
    Reverse(sp + 1, end);
    return 1;
}

/*

 * X1/(X2*10+X3) + X4/(X5*10+X6) + X7/(X8*10+X9) = 1

 *<==>

 * X1*(X5*10+X6)*(X8*10+X9) + X4*(X2*10+X3)*(X8*10+X9) + X7*(X2*10+X3)*(X5*10+X6) = (X2*10+X3)*(X5*10+X6)*(X8*10+X9)

 */

int main()
{
    int x[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    do {
        if (x[0] * (x[4] * 10 + x[5]) * (x[7] * 10 + x[8]) +
            x[3] * (x[1] * 10 + x[2]) * (x[7] * 10 + x[8]) +
            x[6] * (x[1] * 10 + x[2]) * (x[4] * 10 + x[5]) == (x[1] * 10 + x[2]) * (x[4] * 10 + x[5]) * (x[7] * 10 + x[8]))
        {
            printf("%4d%10d%10d\n", x[0], x[3], x[6]);
            printf("------- + ------- + ------- = 1\n");
            printf("%4d%10d%10d\n\n", x[1] * 10 + x[2], x[4] * 10 + x[5], x[7] * 10 + x[8]);
        }
    } while (NextPermutation(x, x + 9));
    return 0;
}
图片附件: 游客没有浏览图片的权限,请 登录注册

老杨没说错,他给你的是思路,这道题其实就是用全排列来做,NextPermutation这个函数就是我模仿STL里的next_permutation写的。

My life is brilliant
2012-12-15 09:38
快速回复:有一道题,求思路
数据加载中...
 
   



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

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