标题:这道题的条件如何转换?
只看楼主
z894494132
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-11-4
结帖率:0
已结贴  问题点数:20 回复次数:17 
这道题的条件如何转换?
在山区小学往往一个教师要兼多门课。现已知三位教师A,B,C,各教两门课,互不重复。共有下述6门课:语文、外语、算术、地理、音乐和美术。已知如下情况:
1.语文老师和算术老师是邻居;
2.地理老师比语文老师年龄大;
3.A每到假期都要约地理老师和算术老师去赶集;
4.B最年轻;
5.B经常约语文老师和音乐老师到他家聊天。
请你编程输出A、B、C三个各教哪两门课。
为了输出方便,我们将6门课编号如下:
课名    编号
语文    1
外语    2
算术    3
地理    4
音乐    5
美术    6
输出格式
屏幕输出三行,每行两个编号,编号间有一个空格,从小到大输出。第一行的两个编号表示A所教的两门课程;第二行的两个编号是B所教的课;第三行是C所教的课。
搜索更多相关主题的帖子: 音乐 语文 美术 教师 如何 
2013-11-04 17:30
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
得分:3 
0、每人只能教两门课且互不重复
1、语文和算术不是同一个人教(原条件1)
2、地理和语文不是同一个人教(原条件2)
3、地理和算术不是同一个人教(原条件3)
4、语文和音乐不是同一个人教(原条件5)
5、A不教地理和算术(原条件3)
6、B不教地理(原条件2、4)
7、B不教语文和音乐(原条件5)

在初始条件的限制下一共90种可能的执教情况,应用之后的7个限制条件穷举满足条件的情况即可。

重剑无锋,大巧不工
2013-11-04 17:51
又一轮明月
Rank: 2
等 级:论坛游民
帖 子:13
专家分:50
注 册:2013-10-31
得分:3 
离散数学的问题,很so easy
2013-11-04 18:02
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
得分:0 
难易是个相对概念。这样吧,楼上或者任何人写一个解决这个问题的代码出来,我送他100专家分。

注意,自己手工演算出结果直接写在程序里输出的不算。这不只是考察你的逻辑分析能力,更主要是考察你用计算机解决问题的能力。

还有兄弟的分数不多,只奖励第一个用代码正确解决的人

结果可以跟贴在这里,想单独开贴也行,记得拿短消息通知我一下(最近我来论坛的时间不定)。

重剑无锋,大巧不工
2013-11-04 20:20
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
得分:0 
置个顶吧,怕人不知道这里还藏着独享的100分就不加色了。

重剑无锋,大巧不工
2013-11-04 23:02
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:3 
输出格式
屏幕输出三行,每行两个编号,编号间有一个空格,从小到大输出。
------ 根据“输出格式”的意思应该只有一组解,但我根据beyondyf大侠的分析,怎么求出两组解?
语外 算美 地音
语美 外算 地音
2013-11-05 09:08
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
得分:0 
如果楼主题目的描述没错的话,那确实是两组解,题目中没有提到外语和美术这两门课的限制条件,这样它俩是可以互换的(如果不是同一个人教的话)。

重剑无锋,大巧不工
2013-11-05 09:22
pycansi
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:418
专家分:1060
注 册:2012-7-26
得分:3 
没想像中的容易啊,有些问题写的时候才发现....搞了半天总算搞好了....
程序代码:
#include "stdio.h"
#include "stdlib.h"

int c[7] = {0};        //分别代表A,B,C教的两门课, c[0]空着不用
int c_t[20][7] = {0};    //存放结果....
int c_t_i = 0;        //不说了,说多了都是泪啊

int check_c6 (void);
int check_c2 (int c1, int c2);
void store (void);
void print_result (void);
int whether_store (void);

int main (void)
{
    for (c[1]=1; c[1]<=6; c[1]++)
    {
        for (c[2]=1; c[2]<=6; c[2]++)
        {
            for (c[3]=1; c[3]<=6; c[3]++)
            {
                for (c[4]=1; c[4]<=6; c[4]++)
                {
                    for (c[5]=1; c[5]<=6; c[5]++)
                    {
                        for (c[6]=1; c[6]<=6; c[6]++)
                        {
                            if (check_c6 ())
                            {
                                continue;
                            }

                            if (check_c2 (1, 3))
                            {
                                continue;
                            }
                            if (check_c2 (1, 4))
                            {
                                continue;
                            }
                            if (check_c2 (3, 4))
                            {
                                continue;
                            }
                            if (check_c2 (1, 5))
                            {
                                continue;
                            }
                            if (c[1]==3||c[1]==4||c[2]==3||c[2]==4)
                            {
                                continue;
                            }
                            if (c[3]==4||c[4]==4)
                            {
                                continue;
                            }
                            if (c[3]==1||c[3]==5||c[4]==1||c[4]==5)
                            {
                                continue;
                            }

                            if (whether_store ())
                            {
                                continue;
                            }
                            store ();
                        }
                    }
                }
            }
        }
    }
    print_result ();

    system ("pause");
    return 0;
}

int check_c6 (void)
{
    for (int i=2,j=1; j<=6; i++)
    {
        if (j == i)
        {
            i++;
            if (j == 6)
            {
                break;
            }
        }
   
        if (c[j] == c[i])
        {
            return 1;
        }
        if (i == 6)
        {
            j++;
            i = 0;
        }
    }

    return 0;
}        

int check_c2 (int c1, int c2)
{
    if ((c[1]==c1&&c[2]==c2)||(c[1]==c2&&c[2]==c1))
    {
        return 1;
    }
    if ((c[3]==c1&&c[4]==c2)||(c[3]==c2&&c[4]==c1))
    {
        return 1;
    }
    if ((c[5]==c1&&c[6]==c2)||(c[5]==c2&&c[6]==c1))
    {
        return 1;
    }

    return 0;
}

void store (void)
{
    for (int i=1; i<=6; i++)
    {
        c_t[c_t_i][i] = c[i];
    }
    c_t_i++;
}

void print_result (void)
{
    for (int i=0; i<=c_t_i-1; i++)
    {
        printf ("********** \n%d \t%d \n%d \t%d \n%d \t%d \n", c_t[i][1], c_t[i][2], c_t[i][3], c_t[i][4], c_t[i][5], c_t[i][6]);
    }
}

int whether_store (void)
{
    for (int i=0; i<=c_t_i-1; i++)
    {
        if ((c[1]==c_t[i][2]&&c[2]==c_t[i][1])||(c[3]==c_t[i][4]&&c[4]==c_t[i][3])||(c[5]==c_t[i][6]&&c[6]==c_t[i][5]))
        {
            return 1;
        }
    }

    return 0;
}

大家将就着看吧...


[ 本帖最后由 pycansi 于 2013-11-5 18:50 编辑 ]


莫问前尘有愧,但求今生无悔
2013-11-05 09:46
pycansi
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:418
专家分:1060
注 册:2012-7-26
得分:0 
补充:最内层判断和2楼版主大大一一对应 ,除了最后一个(去除重复的结果)

[ 本帖最后由 pycansi 于 2013-11-5 19:12 编辑 ]


莫问前尘有愧,但求今生无悔
2013-11-05 18:56
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
得分:3 
不懂哇,求思路

思考赐予新生,时间在于定义
2013-11-05 22:51



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




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

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