来看看这道题

libi 2003-06-19 10:10:47
超星上看来的,有点意思,答案不重要,重要的是过程,谁给出分析的方法和过程。

> 请回答下面10个问题:
>   1、第一个答案是b的问题是哪一个?
>   (a)2;(b) 3;(c)4;(d)5;(e)6
>   2、唯一的连续两个具有相同答案的问题是:
>   (a)2,3;(b)3,4;(c)4,5;(d)5,6;(e)6,7;
>   3、本问题答案和哪一个问题的答案相同?
>   (a)1;(b)2;(c)4;(d)7;(e)6
>   4、答案是a的问题的个数是:
>   (a)0;(b)1;(c)2;(d)3;(e)4
>   5、本问题答案和哪一个问题的答案相同?
>   (a)10;(b)9;(c)8;(d)7;(e)6
>   6、答案是a的问题的个数和答案是什么的问题的个数相同?
>   (a)b;(b)c;(c)d;(d)e;(e)以上都不是
>   7、按照字母顺序,本问题的答案和下一个问题的答案相差几个字母?
>   (a)4;(b)3;(c)2;(d)1;(e)0。(注:a和b相差一个字母)
>   8、答案是元音字母的问题的个数是:
>   (a)2;(b)3;(c)4;(d)5;(e)6。(注:a和e是元音字母)
>   9、答案是辅音字母的问题的个数是:
>   (a)一个质数;(b)一个阶乘数;(c)一个平方数;(d)一个立方数,(e)5的倍数
>   10、本问题的答案是:
>   (a)a;(b)b;(c)c;(d)d;(e)e。
...全文
36 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
libi 2003-06-27
  • 打赏
  • 举报
回复
还有没有没看过这题的,看一下吧,省得以后又重复出。月底就结帖。
Riemann 2003-06-22
  • 打赏
  • 举报
回复
楼主的问题以前有人分析过了,找找就贴子吧!
libi 2003-06-21
  • 打赏
  • 举报
回复
up一下,除了穷举和回溯是否还有别的算法。
cxjddd 2003-06-21
  • 打赏
  • 举报
回复
pfpf,强!!!

其实可以一个一个推的嘛,用不着全排序吧。
HUNTON 2003-06-20
  • 打赏
  • 举报
回复
楼上的程序好象不能运行啊
mmmcd 2003-06-20
  • 打赏
  • 举报
回复
有类似问题:

原题:有五位小姐排成一列,所有的小姐姓不同、穿的衣服颜色不同、喝不同的饮料、养不同的宠物、吃不同的水果。
钱小姐穿红色衣服;翁小姐养了一只狗;陈小姐喝茶;穿绿衣服的站在穿
白衣服的左边;穿绿衣服的小姐喝咖啡;吃西瓜的小姐养鸟;穿黄衣服的小姐吃
梨;站在中间的小姐喝牛奶;赵小姐站在最左边;吃橘子的小姐站在养猫的旁边;
养鱼的小姐旁边的那位吃梨;吃苹果的小姐喝香槟;江小姐吃香蕉;赵小姐站在
穿蓝衣服的小姐旁边;喝开水的小姐站在吃橘子的小姐旁边;请问哪位小姐养蛇?

/*
颜色依次是:黄、蓝、红、绿、白。
水果依次是梨、桔、瓜、蕉、果。
姓依次是:赵、陈、钱、江、翁。
宠物依次是猫、鱼、鸟、蛇、狗。
饮料依次是开水、茶、奶、咖啡、香槟
girl= 53142;
color= 54123;
drink= 12543;
pet= 35241;
fruit= 25143;
*/
/*本程序用穷举法,生成所有可能,根据给定条件筛选出正确结果
为了减少循环次数,把判断条件分散至循环嵌套内*/
void main()
{
int girl,color,drink,pet,fruit;
/*数组第二维表示第几位,第一维表示每个位置的属性,依次是姓、颜色、饮料、宠物、水果
girl:1-钱,2-翁,3-陈,4-江,5-赵。
color:1-红,2-绿,3-白,4-蓝,5-黄。
drink:1-开水,2-茶,3-香槟,4-咖啡,5-牛奶。
pet:1-狗,2-鸟,3-猫,4-蛇,5-鱼。
fruit:1-西瓜,2=梨,3-苹果,4-香蕉,5-桔子。
例如第一位小姐姓赵,则temp[1][1]=5*/
int temp[6][6];
/*条件判断时的临时变量*/
int i1,i2,i3,i4,i5,i6;
/*得出结果标志*/
int result=0;
/*产生1-5的全排列。共有1*2*3*4*5=120种可能*/
int ttt[121][6];
i6=1;
for(i1=1;i1<=5;i1++)
for(i2=1;i2<=5;i2++)
for(i3=1;i3<=5;i3++)
for(i4=1;i4<=5;i4++)
for(i5=1;i5<=5;i5++)
{
if(i1==i2¦¦i1==i3¦¦i1==i4¦¦i1==i5¦¦i2==i3¦¦i2==i4¦¦i2==i5¦¦i3==i4¦¦i3==i5¦¦i4==i5)
continue;
ttt[i6][1]=i1;
ttt[i6][2]=i2;
ttt[i6][3]=i3;
ttt[i6][4]=i4;
ttt[i6][5]=i5;
i6++;
}
/*产生姓名全排列。*/
for(girl=1;girl<=120;girl++)
{
temp[1][1]=ttt[girl][1];temp[2][1]=ttt[girl][2];temp[3][1]=ttt[girl][3];
temp[4][1]=ttt[girl][4];temp[5][1]=ttt[girl][5];
/*赵小姐站在最左边;*/
if(temp[1][1]!=5) continue;
/*产生颜色全排列*/
for(color=1;color<=120;color++)
{
temp[1][2]=ttt[color][1];temp[2][2]=ttt[color][2];temp[3][2]=ttt[color][3];
temp[4][2]=ttt[color][4];temp[5][2]=ttt[color][5];
/*赵小姐站在穿蓝衣服的小姐旁边;*/
if(temp[2][2]!=4) continue;
/*钱小姐穿红色衣服*/
result=0;
for(i1=1;i1<=5;i1++)
if(temp[i1][1]==1&&temp[i1][2]==1) {result++; break; }
/*穿绿衣服的站在穿白衣服的左边*/
for(i1=1;i1<=5;i1++)
if(temp[i1][2]==2&&temp[i1+1][2]==3&&i1!=5) {result++; break; }
if(result!=2) continue;
/*产生饮料全排列*/
for(drink=1;drink<=120;drink++)
{
temp[1][3]=ttt[drink][1];temp[2][3]=ttt[drink][2];temp[3][3]=ttt[drink][3];
temp[4][3]=ttt[drink][4];temp[5][3]=ttt[drink][5];
/*站在中间的小姐喝牛奶;*/
if(temp[3][3]!=5) continue;
result=0;
/*陈小姐喝茶;*/
for(i1=1;i1<=5;i1++)
if(temp[i1][1]==3&&temp[i1][3]==2) {result++; break; }
/*穿绿衣服的小姐喝咖啡;*/
for(i1=1;i1<=5;i1++)
if(temp[i1][2]==2&&temp[i1][3]==4) {result++; break; }
if(result!=2) continue;
/*产生宠物全排列*/
for(pet=1;pet<=120;pet++)
{ temp[1][4]=ttt[pet][1];temp[2][4]=ttt[pet][2];temp[3][4]=ttt[pet][3];
temp[4][4]=ttt[pet][4];temp[5][4]=ttt[pet][5];
result=0;
/*翁小姐养了一只狗;*/
for(i1=1;i1<=5;i1++)
if(temp[i1][1]==2&&temp[i1][4]==1) {result++; break; }
if(result!=1) continue;
/*产生水果全排列*/
for(fruit=1;fruit<=120;fruit++)
{
temp[1][5]=ttt[fruit][1];temp[2][5]=ttt[fruit][2];temp[3][5]=ttt[fruit][3];
temp[4][5]=ttt[fruit][4];temp[5][5]=ttt[fruit][5];
result=0;
/*吃西瓜的小姐养鸟;*/
for(i1=1;i1<=5;i1++)
if(temp[i1][5]==1&&temp[i1][4]==2) {result++; break; }
/*穿黄衣服的小姐吃梨;*/
for(i1=1;i1<=5;i1++)
if(temp[i1][2]==5&&temp[i1][5]==2) {result++; break; }
/*吃橘子的小姐站在养猫的旁边;*/
for(i1=1;i1<=5;i1++)
if(temp[i1][5]==5&&(((i1!=1)&&temp[i1-1][4]==3)¦¦((i1!=5)&&temp[i1+1][4]==3)))
{result++; break; }
/*养鱼的小姐旁边的那位吃梨;*/
for(i1=1;i1<=5;i1++)
if(temp[i1][4]==5&&(((i1!=1)&&temp[i1-1][5]==2)¦¦((i1!=5)&&temp[i1+1][5]==2)))
{result++; break; }
/*吃苹果的小姐喝香槟;*/
for(i1=1;i1<=5;i1++)
if(temp[i1][5]==3&&temp[i1][3]==3) {result++; break; }
/*江小姐吃香蕉;*/
for(i1=1;i1<=5;i1++)
if(temp[i1][1]==4&&temp[i1][5]==4) {result++; break; }
/*喝开水的小姐站在吃橘子的小姐旁边;*/
for(i1=1;i1<=5;i1++)
if(temp[i1][3]==1&&(((i1!=1)&&temp[i1-1][5]==5)¦¦((i1!=5)&&temp[i1+1][5]==5)))
{result++; break; }
if(result==7) goto endend;
}}}}}
endend:
if(result==7)
/*找到后打印结果*/
for(i1=1;i1<=5;i1++)
{ for(i2=1;i2<=5;i2++)
printf("%d ",temp[i1][i2]);
printf("\n"); }
else
/*没找到*/
printf("我做不出来\n");
}
HUNTON 2003-06-19
  • 打赏
  • 举报
回复
不可能的,第5题选如果选b,第2题就不是选d了,而是c,同理可以排除c,d。肯定会出现矛盾的。
KenShin1978 2003-06-19
  • 打赏
  • 举报
回复
to HUNTON():
我觉得你的答案有点问题,如果7,8,9的答案是d,c,b的话,那么第5题选b,c,d都是正确的,多选应该是不允许的吧




wenchanyee 2003-06-19
  • 打赏
  • 举报
回复
上面那位仁兄是用的穷举
我想用试探算法是不是应该更好的呢?也就是回溯法

问题的解也就是找一个序列
在满足条件的情况下继续向下试探
反之回溯

这样能在最短的时间内找到解,但不知道是不是还有其他的解
HUNTON 2003-06-19
  • 打赏
  • 举报
回复
这个是实现程序:

#include "math.h"
#include "stdio.h"

//题1 返回:0 正确 -1 1~5 错误
int NO1(int *Answer)
{
int i=1;
while(i<=10)
{
if(Answer[i]==2)
{
switch(Answer[1])
{
case 1:
if(i==2)
return 0;
else
return 1;
case 2:
if(i==3)
return 0;
else
return 2;
case 3:
if(i==4)
return 0;
else
return 3;
case 4:
if(i==5)
return 0;
else
return 4;
case 5:
if(i==6)
return 0;
else
return 5;
default:
return -1;
}
}
i++;
}
return -1;
}

//题2 返回:0 正确 -1 1~5 错误
int NO2(int *Answer)
{
int i=1,n=0;
while(i<10)
{
if(Answer[i]==Answer[i+1]) n++;
i++;
}
if(n==1)
{
switch(Answer[2])
{
case 1:
if(Answer[2]==Answer[3])
return 0;
else
return 1;
case 2:
if(Answer[3]==Answer[4])
return 0;
else
return 2;
case 3:
if(Answer[4]==Answer[5])
return 0;
else
return 3;
case 4:
if(Answer[5]==Answer[6])
return 0;
else
return 4;
case 5:
if(Answer[6]==Answer[7])
return 0;
else
return 5;
default:
return -1;
}
}
return -1;
}

//题3 返回:0 正确 -1 1~5 错误
int NO3(int *Answer)
{
switch(Answer[3])
{
case 1:
if(Answer[3]==Answer[1])
return 0;
else
return 1;
case 2:
if(Answer[3]==Answer[2])
return 0;
else
return 2;
case 3:
if(Answer[3]==Answer[4])
return 0;
else
return 3;
case 4:
if(Answer[3]==Answer[7])
return 0;
else
return 4;
case 5:
if(Answer[3]==Answer[6])
return 0;
else
return 5;
default:
return -1;
}
return -1;
}

//题4 返回:0 正确 -1 1~5 错误
int NO4(int *Answer)
{
int i=1,n=0;
while(i<=10)
{
if(Answer[i]==1) n++;
i++;
}
switch(Answer[4])
{
case 1:
if(n==0)
return 0;
else
return 1;
case 2:
if(n==1)
return 0;
else
return 2;
case 3:
if(n==2)
return 0;
else
return 3;
case 4:
if(n==3)
return 0;
else
return 4;
case 5:
if(n==4)
return 0;
else
return 5;
default:
return -1;
}
return -1;
}

//题5 返回:0 正确 -1 1~5 错误
int NO5(int *Answer)
{
switch(Answer[5])
{
case 1:
if(Answer[5]==Answer[10])
return 0;
else
return 1;
case 2:
if(Answer[5]==Answer[9])
return 0;
else
return 2;
case 3:
if(Answer[5]==Answer[8])
return 0;
else
return 3;
case 4:
if(Answer[5]==Answer[7])
return 0;
else
return 4;
case 5:
if(Answer[5]==Answer[6])
return 0;
else
return 5;
default:
return -1;
}
return -1;
}

//题6 返回:0 正确 -1 1~5 错误
int NO6(int *Answer)
{
int i=1,na=0,nb=0,nc=0,nd=0,ne=0;
while(i<=10)
{
switch(Answer[i])
{
case 1: na++;break;
case 2: nb++;break;
case 3: nc++;break;
case 4: nd++;break;
case 5: ne++;break;
default:return -1;break;
}
i++;
}
switch(Answer[6])
{
case 1:
if(na==nb)
return 0;
else
return 1;
case 2:
if(na==nc)
return 0;
else
return 2;
case 3:
if(na==nd)
return 0;
else
return 3;
case 4:
if(na==ne)
return 0;
else
return 4;
case 5:
if((na!=nb)&&(na!=nc)&&(na!=nd)&&(na!=ne))
return 0;
else
return 5;
default:
return -1;
}
return -1;
}

//题7 返回:0 正确 -1 1~5 错误
int NO7(int *Answer)
{
switch(Answer[7])
{
case 1:
if(abs(Answer[7]-Answer[8])==4)
return 0;
else
return 1;
case 2:
if(abs(Answer[7]-Answer[8])==3)
return 0;
else
return 2;
case 3:
if(abs(Answer[7]-Answer[8])==2)
return 0;
else
return 3;
case 4:
if(abs(Answer[7]-Answer[8])==1)
return 0;
else
return 4;
case 5:
if(abs(Answer[7]-Answer[8])==0)
return 0;
else
return 5;
default:return -1;
}
return -1;
}

//题8 返回:0 正确 -1 1~5 错误
int NO8(int *Answer)
{
int i=1,n=0;
while(i<=10)
{
if((Answer[i]==1)||(Answer[i]==5)) n++;
i++;
}
switch(Answer[8])
{
case 1:
if(n==2)
return 0;
else
return 1;
case 2:
if(n==3)
return 0;
else
return 2;
case 3:
if(n==4)
return 0;
else
return 3;
case 4:
if(n==5)
return 0;
else
return 4;
case 5:
if(n==6)
return 0;
else
return 5;
default:return -1;
}
return -1;
}

//题9 返回:0 正确 -1 1~5 错误
int NO9(int *Answer)
{
int i=1,n=0;
while(i<=10)
{
if((Answer[i]==2)||(Answer[i]==3)||(Answer[i]==4)) n++;
i++;
}
switch(Answer[9])
{
case 1:
if((n==2)||(n==3)||(n==5)||(n==7)) //质数(素数)
return 0;
else
return 1;
case 2:
if((n==1)||(n==2)||(n==6)) //阶乘数
return 0;
else
return 2;
case 3:
if((n==1)||(n==4)||(n==9)) //平方数
return 0;
else
return 3;
case 4:
if((n==1)||(n==8)) //立方数
return 0;
else
return 4;
case 5:
if((n==5)||(n==10)) //5的倍数
return 0;
else
return 5;
default:return -1;
}
return -1;
}


void main()
{
int i;
int Answer[11];
char Answerc[5] = {'a','b','c','d','e'};
for (Answer[1]=1;Answer[1]<=5;Answer[1]++)
for (Answer[2]=1;Answer[2]<=5;Answer[2]++)
for (Answer[3]=1;Answer[3]<=5;Answer[3]++)
for (Answer[4]=1;Answer[4]<=5;Answer[4]++)
for (Answer[5]=1;Answer[5]<=5;Answer[5]++)
for (Answer[6]=1;Answer[6]<=5;Answer[6]++)
for (Answer[7]=1;Answer[7]<=5;Answer[7]++)
for (Answer[8]=1;Answer[8]<=5;Answer[8]++)
for (Answer[9]=1;Answer[9]<=5;Answer[9]++)
for (Answer[10]=1;Answer[10]<=5;Answer[10]++)
{
if((NO1(Answer)==0)&&(NO2(Answer)==0)&&(NO3(Answer)==0)&&(NO4(Answer)==0)&&(NO5(Answer)==0)&&(NO6(Answer)==0)&&(NO7(Answer)==0)&&(NO8(Answer)==0)&&(NO9(Answer)==0))
{
for(i = 1; i < 11; i++){
printf(" %c ",Answerc[Answer[i] - 1]);
}
}
}

}
HUNTON 2003-06-19
  • 打赏
  • 举报
回复
答案是cdebeedcba,用手工算的话可能性太多了,要借助计算机来实现
bache1115 2003-06-19
  • 打赏
  • 举报
回复
up
BlueSky2008 2003-06-19
  • 打赏
  • 举报
回复
关注一下
NowCan 2003-06-19
  • 打赏
  • 举报
回复
关注一下,这个问题我问过。
《深入浅出 C++》视频教程详细、系统地介绍了 C++ 开发中方方面面的技术细节,整个课程涵盖知识点非常多,知识模块囊括 名字空间、类与对象、继承与多态、各类友元、异常机制、函数模板、类模板、STL容器操作等等,学完之后将拥有C++开发的非常坚实的功底。 注意:本套视频教程来源于线下的实体班级,因此视频中有少量场景对话和学生问答,对此比较介意的亲们谨慎购买。 本套视频教程不仅会讲清楚概念和相应知识点,而且会抽丝剥茧,讲清楚来龙去脉,站在编程语言设计者的角度讲清楚为什么会出现这样的语法,站得高才能看得远,而不仅仅纠缠于细碎的语法。既有登高望远的视角,又有俯身前行的实践,有别于市面上大多数流于表面的教程。下面是讲解迭代器的一节视频的截图: 每个知识点不仅仅会通过视频讲解清楚,并且会配以精心安排的实验和作业,用来保证学习过程中切实掌握核心技术和概念,通过实验来巩固,通过实验来检验,实验与作业的目的是发现问题,发现技术盲点,通过答疑和沟通夯实技术技能。注意:本套视频教程包含全套11套作业题,覆盖所有视频知识点,循序渐进,各个击破。下面是部分作业题目展示,每道题都有知识点说明,是检验学习效果的一大利器:常见问题:问:零基础可以学习吗?答:这门课程并非针对完全零基础的学员,学习这门课程需要对C语言有了一定了解的。问:遇到问题可以答疑吗?答:可以的,购买课程后可以联系到我,安排进入专门的QQ答疑群。不仅可以向老师提问,也可以跟其他同学讨论,结交兴趣相投的朋友。问:学完能做什么?答:C++是众多开发岗位的必备技能,也是进入面向对象编程领域的一门利器,可以胜任很多岗位的职业要求。尤其是对游戏开发、游戏引擎、算法、界面开发、系统开发等等,C++都是热门技术。

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧