标题:这道题把我困扰好久,求指点。
只看楼主
dengjianqing
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2013-4-15
得分:0 
感觉这样的速度好慢呀!
2013-04-22 17:24
dengjianqing
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2013-4-15
得分:0 
请帮忙看一下有没有可以优化的地方呢?
2013-04-22 17:24
y3765258
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:106
专家分:172
注 册:2013-4-9
得分:0 
回复 8楼 dengluoy
这道题你做过?

有问题一起探讨,一起进步。
2013-04-23 07:50
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
得分:0 
题目不全?


[fly]存在即是合理[/fly]
2013-04-23 08:42
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
得分:0 
就目前的条件至少有上百万组结果,有意义么?肯定还有条件。只是我不明白楼主为什么还遮遮掩掩的。

重剑无锋,大巧不工
2013-04-23 09:31
dengjianqing
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2013-4-15
得分:0 
没有做过,只是尝试着写了一下,发现存储起来还是可以的,但是如果要加上打印的话,就要慢很多了。
2013-04-23 09:34
dengluoy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:127
专家分:165
注 册:2013-2-5
得分:0 
还有
某保密单位机构要人员 A B C D E 每周需要工作5天,休息2天
1.所有人的连续工作日不能多于3天(注意:周日连到下周一夜市连续)。
2.一周中,至少有3天所有人都是上班的.
3.任何一天,必须保证 A B C D 中至少有2人上班.
4.B D E 在周日那天必须上班。
5.A E周三必须上班。
6.A C 一周中必须至少有4天能见面(即同时上班)

一同学习, 一同进步
2013-04-23 15:40
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
得分:0 
以下是引用dengluoy在2013-4-23 15:40:57的发言:

还有
某保密单位机构要人员 A B C D E 每周需要工作5天,休息2天
1.所有人的连续工作日不能多于3天(注意:周日连到下周一夜市连续)。
2.一周中,至少有3天所有人都是上班的.
3.任何一天,必须保证 A B C D 中至少有2人上班.
4.B D E 在周日那天必须上班。
5.A E周三必须上班。
6.A C 一周中必须至少有4天能见面(即同时上班)

这就对了,不考虑条件一共有 5 * C75 = 105 种,穷举即可


[fly]存在即是合理[/fly]
2013-04-23 17:19
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
得分:0 
想简单了,是21^5种、、、


[fly]存在即是合理[/fly]
2013-04-23 17:49
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
得分:20 
先考虑条件 1,只有 7种
011 0111     011 1011
101 1011     101 1101
110 1101     110 1110
111 0110

然后 7^5 约 16000,可以穷举了,代码如下:
程序代码:
#include <stdio.h>

const int vol[] = {0x37, 0x3b, 0x5b, 0x5c, 0x6c, 0x6d, 0x76};

int person[5] = {0};

int get(int result, int day)
{
    return (result & (1 << (6 - day))) != 0;
}
int judge2()
{
    int i, j, ans, res = 0;
    for (i = 0;i < 7;++i)
    {
        ans = 0;
        for (j = 0;j < 5;++j)
        {
            ans += get( person[j], i );
        }
        res += ans == 5;
    }
    return res >= 3;
}
int judge3()
{
    int i, j, ans;
    for (i = 0;i < 7;++i)
    {
        ans = 0;
        for (j = 0;j < 4;++j)
        {
            ans += get( person[j], i );
        }
        if (ans < 2)    return 0;
    }
    return 1;
}
int judge4()
{
    return 3 == get( person[1], 0 ) + 
    get( person[3], 0 ) + get( person[4], 0 );
}
int judge5()
{
    return 2 == get( person[0], 3 ) + get( person[4], 3 );
}
int judge6()
{
    int i, ans = 0;
    for (i = 0;i < 7;++i)
    {
        ans += get( person[0], i ) && get( person[2], i );
    }
    return ans >= 4;
}
int judge()
{
    return judge2() && judge3() && judge4() && judge5() && judge6();
}
void init(int tmp)
{
    int i;
    for (i = 0;i < 7;++i)
    {
        person[i] = vol[ tmp % 7 ];
        tmp /= 7;
    }
}
void Output()
{
    int i, j;
    for (i = 0;i < 5;++i)
    {
        for (j = 0;j < 7;++j)
        {
            printf("%d ", get( person[i], j) );
        }
        printf("\n");
    }
    printf("\n");
}
int main()
{
    int i, all = 7 * 7 * 7 * 7 * 7;

    for (i = 0;i < all;++i)
    {
        init(i);
        if (judge())    Output();
    }
    return 0;
}


[fly]存在即是合理[/fly]
2013-04-23 18:47



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-405071-1-1.html




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

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