黑马程序员技术交流社区
标题:
算法求解解题思路?????
[打印本页]
作者:
为梦想而活着
时间:
2014-4-10 17:47
标题:
算法求解解题思路?????
112.某高校外语教研室新招进五位外语老师,每位老师只教授一门外语。并且满足以下条件:
(1)如果小钱教德语,那么小孙不教俄语
(2)或者小李教德语,或者小钱教德语
(3)如果小孙不教俄语,那么小赵不教法语
(4)或者小赵教法语,或者小周不教英语。
以下选项如果为真,可以得出“小李教德语”的结论?
A.小孙不教俄语B、小钱教德语C、小周教英语D、小赵不教法语
作者:
赵小豪
时间:
2014-4-10 21:29
本帖最后由 赵小豪 于 2014-4-10 21:30 编辑
//4门语言5个人我不知道一门语言二个人教算不算,我在这是算成立的。这只是我的想法。如果有不同请再告诉我。
public class Text7 {
public static void main(String[] args) {
int zhao, qian, sun, li, zhou, i, j, k, flag;
String str[] = { "英", "法", "德", "俄" };// 定义一个数组存储语言
int arr[] = { 0, 0, 0, 0, 0 };// 初始一个数组代表5位老师用于存储他们对应所教的语言,
// 1=英 2=法 3=德 4=俄 让每位老师不断的去循环,去测试看是否成立
for (zhao = 1; zhao <= 4; zhao++) {
for (qian = 1; qian <= 4; qian++) {
for (sun = 1; sun <= 4; sun++) {
for (li = 1; li <= 4; li++)
for (zhou = 1; zhou <= 4; zhou++) {
flag = 1;
arr[0] = zhao;
arr[1] = qian;
arr[2] = sun;
arr[3] = li;
arr[4] = zhou;
for (i = 1; i <= 4; i++) {
k = 0;
for (j = 0; j < 5; j++) {
if (i == arr[j])
k++;//计数
}
if (k == 0) {//有语言没有人教则退出
flag = 0;
break;
}
}
if (flag == 1)//一人教一门语言
if ((qian == 3 && sun != 4)//如果小钱教德语,那么小孙不教俄语
|| (li == 3 || qian == 3)//或者小李教德语,或者小钱教德语
&& (sun != 4 && zhao != 2)//如果小孙不教俄语,那么小赵不教法语
|| (zhao == 2 || zhou != 1)) //或者小赵教法语,或者小周不教英语。
{
//如果小李教德语则打印输出
if (li == 3) {
System.out.print(" 赵:" + str[zhao - 1]
+ "\t");
System.out.print(" 钱:" + str[qian - 1]
+ "\t");
System.out.print(" 孙:" + str[sun - 1]
+ "\t");
System.out.print(" 李:" + str[li - 1]
+ "\t");
System.out.println(" 周:" + str[zhou - 1] + "\t");
}
}
}
}
}
}
}
}
作者:
小歪
时间:
2014-4-10 22:04
解题思路:首先此题肯定是由“小李教德语”这个最终结果返回去寻找答案,但其中尤为重要是我们寻找的是必然会得到此结果的情况,因为可能存在当某个条件满足时有可能得到“小李教德语”,又有可能得到“小李不教德语”这种情况,此种情况必须避免。
1、由于以上4条条件都是成立的,即为真;
2、那么通过反推要使条件2中“小李教德语”必然为真,根据“或”语句的关系,则肯定其中有一个为假时另一个才能 100%为真的,所以得到“小钱不教德语”。可能有人会问小钱也有可能教德语条件2也为真啊,但是如果小钱教德语了反而得不到“小李教德语”这个必然结果,所以必须避免这种情况,如果还不明白,返回看我的解题思想第一段;
3、要使“小钱不教德语”也成为必然结果,则根据条件1的反推理只有“小孙教俄语”的情况下,小钱才必然不教法语,所以得到“小孙教俄语”。
4、同理,要使“小孙教俄语”也成为必然结果,则根据条件3的反推理只有“小赵教法语”的情况下,小孙才有可能教俄语,所以得到“小赵教法语”。
5、同理,“小赵教法语”必然为真的情况,条件4为“或”语句即一个为真(假)另一个才能得到必然假(真),所以要是“小赵教法语”必然为真,另一句必然就为假,得到
”小周教英语“
的必然条件。
所以答案为:C
(楼主分析了半天,要写成代码估计也得花点时间,在这我就不写了)
作者:
为梦想而活着
时间:
2014-4-11 18:35
这里是要用附言推理规则的
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2