十道连锁问题的求解
来源:互联网 发布:先锋软件 编辑:程序博客网 时间:2024/06/11 00:18
请回答下面的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)4
6、答案是A的问题的个数和答案是什么的问题的个数相同?
(A)B (B)C (C)D (D)E (E)以上都不是
7、按照字母顺序,本问题的答案和下一个问题的答案相差几个字母?
(A)4 (B)3 (C)2 (D)1 (E)0
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
请给出算法。
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)4
6、答案是A的问题的个数和答案是什么的问题的个数相同?
(A)B (B)C (C)D (D)E (E)以上都不是
7、按照字母顺序,本问题的答案和下一个问题的答案相差几个字母?
(A)4 (B)3 (C)2 (D)1 (E)0
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
请给出算法。
initquestion();
makesolution(-1,Memo1);
makesolution(-1,Memo1);
int question[N];//问题解向量,初始值应均置为0
int check1()//检查问题1答案是否正确
{
int ok=0;
int x,i;
x=question[0];
for(i=0;i<N;i++) if(question[i]==2) break;
if(x+1==i+1) ok=1;
return ok ;
}
int check2()//检查问题2答案是否正确
{
int ok=0;
int i,f,c;
c=0;f=-1;
for(i=0;i<N-1;i++)
{
if(question[i]==question[i+1]){
if(f==-1) f=i+1;
c++;
}
}
if(c!=1) ok=0;
else{
switch(question[1]){
case 1:
if(f==2) ok=1;
break;
case 2:
if(f==3) ok=1;
break;
case 3:
if(f==4) ok=1;
break;
case 4:
if(f==5) ok=1;
break;
case 5:
if(f==6) ok=1;
break;
}
}
return ok ;
}
int check3()//检查问题3答案是否正确
{
int ok=0;
int i;
i=question[2];
switch(i){
case 1:
if(i==question[0]) ok=1;
break;
case 2:
if(i==question[1]) ok=1;
break;
case 3:
if(i==question[3]) ok=1;
break;
case 4:
if(i==question[6]) ok=1;
break;
case 5:
if(i==question[5]) ok=1;
break;
}
return ok ;
}
int check4()//检查问题4答案是否正确
{
int ok=0;
int c,i;
c=0;
for(i=0;i<N;i++){
if(question[i]==1) c++;
}
if(c==question[3]-1) ok=1;
return ok ;
}
int check5()//检查问题5答案是否正确
{
int ok=0;
int i;
i=question[4];
switch(i){
case 1:
if(question[9]==1) ok=1;
break;
case 2:
if(question[8]==2) ok=1;
break;
case 3:
if(question[7]==3) ok=1;
break;
case 4:
if(question[6]==4) ok=1;
break;
case 5:
if(question[5]==5) ok=1;
break;
}
return ok;
}
int check6()//检查问题6答案是否正确
{
int ok=0;
int a,b,c,d,e,i;
a=b=c=d=e=0;
for(i=0;i<N;i++){
switch(question[i]){
case 1:a++;break;
case 2:b++;break;
case 3:c++;break;
case 4:d++;break;
case 5:e++;break;
}
}
i=question[5];
switch(i){
case 1:
if(a==b) ok=1;
break;
case 2:
if(a==c) ok=1;
break;
case 3:
if(a==d) ok=1;
break;
case 4:
if(a==e) ok=1;
break;
case 5:
if(a!=b && a!=c && a!=d && a!=e) ok=1;
break;
}
return ok ;
}
int check7() //检查问题7答案是否正确
{
int ok=0;
int i;
i=question[6]-question[7];
if(i<0) i=i*(-1);
switch(question[6]){
case 1:
if(i==4) ok=1;
break;
case 2:
if(i==3) ok=1;
break;
case 3:
if(i==2) ok=1;
break;
case 4:
if(i==1) ok=1;
break;
case 5:
if(i==0) ok=1;
break;
}
return ok;
}
int check8() //检查问题8答案是否正确
{
int ok=0;
int i,c;
c=0;
for(i=0;i<N;i++){
if(question[i]==1 || question[i]==5) c++;
}
switch(question[7]){
case 1:
if(c==2) ok=1;
break;
case 2:
if(c==3) ok=1;
break;
case 3:
if(c==4) ok=1;
break;
case 4:
if(c==5) ok=1;
break;
case 5:
if(c==6) ok=1;
break;
}
return ok ;
}
int check9() //检查问题9答案是否正确
{
int ok=0;
int i,c;
c=0;
for(i=0;i<N;i++){
if(question[i]>=2 && question[i]<=4) c++;
}
switch(question[8]){
case 1:
if(c==1||c==3 || c==5 || c==7) ok=1;
break;
case 2:
if(c==1||c==2 || c==6 ) ok=1;
break;
case 3:
if(c==1||c==4 || c==9) ok=1;
break;
case 4:
if(c==1||c==8) ok=1;
break;
case 5:
if(c==5 || c==10) ok=1;
break;
}
return ok;
}
int check10() //检查问题10答案是否正确
{
return 1;
}
int issolution(void) //依次检查每个问题答案是否正确
{
int ok=0;
if(!check1()) goto pend;
if(!check2()) goto pend;
if(!check3()) goto pend;
if(!check4()) goto pend;
if(!check5()) goto pend;
if(!check6()) goto pend;
if(!check7()) goto pend;
if(!check8()) goto pend;
if(!check9()) goto pend;
if(!check10()) goto pend;
ok=1;
pend:
return ok;
}
void initquestion(void) //初始化解向量
{
int i;
for(i=0;i<N;i++) question[i]=0;
}
void printsolution(TMemo *m) //显示解向量
{
int i;
String t,t1;
char buf[2];
buf[1]=0;
if(m==NULL) return;
t="";
for(i=0;i<N;i++){
t=t+"("+IntToStr(i+1)+")";
buf[0]=question[i]+0x40;
t1=buf;
t=t+t1+" ";
}
m->Lines->Add(t);
}
void makesolution(int k,TMemo *m) //问题求解主算法,主要思想是对状态空间树作深度优先检索
{
int i,x;
static int ttt=0;
k++;
if(k>=N){
x=(question[0]-1)*5+question[1];
if(x>ttt){
progress->Position=x;ttt=x;
Application->ProcessMessages();
}
if(issolution()) printsolution(m);
}
else{
for(i=1;i<=5;i++){
question[k]=i;
makesolution(k,m);
}
}
}
int check1()//检查问题1答案是否正确
{
int ok=0;
int x,i;
x=question[0];
for(i=0;i<N;i++) if(question[i]==2) break;
if(x+1==i+1) ok=1;
return ok ;
}
int check2()//检查问题2答案是否正确
{
int ok=0;
int i,f,c;
c=0;f=-1;
for(i=0;i<N-1;i++)
{
if(question[i]==question[i+1]){
if(f==-1) f=i+1;
c++;
}
}
if(c!=1) ok=0;
else{
switch(question[1]){
case 1:
if(f==2) ok=1;
break;
case 2:
if(f==3) ok=1;
break;
case 3:
if(f==4) ok=1;
break;
case 4:
if(f==5) ok=1;
break;
case 5:
if(f==6) ok=1;
break;
}
}
return ok ;
}
int check3()//检查问题3答案是否正确
{
int ok=0;
int i;
i=question[2];
switch(i){
case 1:
if(i==question[0]) ok=1;
break;
case 2:
if(i==question[1]) ok=1;
break;
case 3:
if(i==question[3]) ok=1;
break;
case 4:
if(i==question[6]) ok=1;
break;
case 5:
if(i==question[5]) ok=1;
break;
}
return ok ;
}
int check4()//检查问题4答案是否正确
{
int ok=0;
int c,i;
c=0;
for(i=0;i<N;i++){
if(question[i]==1) c++;
}
if(c==question[3]-1) ok=1;
return ok ;
}
int check5()//检查问题5答案是否正确
{
int ok=0;
int i;
i=question[4];
switch(i){
case 1:
if(question[9]==1) ok=1;
break;
case 2:
if(question[8]==2) ok=1;
break;
case 3:
if(question[7]==3) ok=1;
break;
case 4:
if(question[6]==4) ok=1;
break;
case 5:
if(question[5]==5) ok=1;
break;
}
return ok;
}
int check6()//检查问题6答案是否正确
{
int ok=0;
int a,b,c,d,e,i;
a=b=c=d=e=0;
for(i=0;i<N;i++){
switch(question[i]){
case 1:a++;break;
case 2:b++;break;
case 3:c++;break;
case 4:d++;break;
case 5:e++;break;
}
}
i=question[5];
switch(i){
case 1:
if(a==b) ok=1;
break;
case 2:
if(a==c) ok=1;
break;
case 3:
if(a==d) ok=1;
break;
case 4:
if(a==e) ok=1;
break;
case 5:
if(a!=b && a!=c && a!=d && a!=e) ok=1;
break;
}
return ok ;
}
int check7() //检查问题7答案是否正确
{
int ok=0;
int i;
i=question[6]-question[7];
if(i<0) i=i*(-1);
switch(question[6]){
case 1:
if(i==4) ok=1;
break;
case 2:
if(i==3) ok=1;
break;
case 3:
if(i==2) ok=1;
break;
case 4:
if(i==1) ok=1;
break;
case 5:
if(i==0) ok=1;
break;
}
return ok;
}
int check8() //检查问题8答案是否正确
{
int ok=0;
int i,c;
c=0;
for(i=0;i<N;i++){
if(question[i]==1 || question[i]==5) c++;
}
switch(question[7]){
case 1:
if(c==2) ok=1;
break;
case 2:
if(c==3) ok=1;
break;
case 3:
if(c==4) ok=1;
break;
case 4:
if(c==5) ok=1;
break;
case 5:
if(c==6) ok=1;
break;
}
return ok ;
}
int check9() //检查问题9答案是否正确
{
int ok=0;
int i,c;
c=0;
for(i=0;i<N;i++){
if(question[i]>=2 && question[i]<=4) c++;
}
switch(question[8]){
case 1:
if(c==1||c==3 || c==5 || c==7) ok=1;
break;
case 2:
if(c==1||c==2 || c==6 ) ok=1;
break;
case 3:
if(c==1||c==4 || c==9) ok=1;
break;
case 4:
if(c==1||c==8) ok=1;
break;
case 5:
if(c==5 || c==10) ok=1;
break;
}
return ok;
}
int check10() //检查问题10答案是否正确
{
return 1;
}
int issolution(void) //依次检查每个问题答案是否正确
{
int ok=0;
if(!check1()) goto pend;
if(!check2()) goto pend;
if(!check3()) goto pend;
if(!check4()) goto pend;
if(!check5()) goto pend;
if(!check6()) goto pend;
if(!check7()) goto pend;
if(!check8()) goto pend;
if(!check9()) goto pend;
if(!check10()) goto pend;
ok=1;
pend:
return ok;
}
void initquestion(void) //初始化解向量
{
int i;
for(i=0;i<N;i++) question[i]=0;
}
void printsolution(TMemo *m) //显示解向量
{
int i;
String t,t1;
char buf[2];
buf[1]=0;
if(m==NULL) return;
t="";
for(i=0;i<N;i++){
t=t+"("+IntToStr(i+1)+")";
buf[0]=question[i]+0x40;
t1=buf;
t=t+t1+" ";
}
m->Lines->Add(t);
}
void makesolution(int k,TMemo *m) //问题求解主算法,主要思想是对状态空间树作深度优先检索
{
int i,x;
static int ttt=0;
k++;
if(k>=N){
x=(question[0]-1)*5+question[1];
if(x>ttt){
progress->Position=x;ttt=x;
Application->ProcessMessages();
}
if(issolution()) printsolution(m);
}
else{
for(i=1;i<=5;i++){
question[k]=i;
makesolution(k,m);
}
}
}
- 十道连锁问题的求解
- 一个XNA程序引发的连锁问题
- 餐饮行业连锁经营存在的问题及对策
- 关于学连锁经营管理专业的问题_百度知道
- 解决无意间CentOS卸载Sqlite后引发的连锁问题
- 连锁不平衡的计算方法
- 约瑟夫问题的求解
- 汉诺塔问题的求解
- 开灯问题的求解!
- 约瑟夫问题的求解
- 迷宫问题的求解
- TopK问题的求解
- 求解n的阶乘问题
- 一个搜索问题的求解
- 迷宫问题的递归求解
- 汉诺塔问题的递归求解
- 农夫过河问题的求解
- 跳河问题的php求解
- 导入/导出Excel
- 类的拷贝构造函数的参数
- 关于配置文件的访问次序
- 偶数分解成两个素数之和
- 深入分析ADO.NET中的DataSet对象
- 十道连锁问题的求解
- [英文]投稿、审稿以及修改稿件时的常用句型
- 王朔简介
- google sitemap 制作工具
- 转舵
- ASP.NET 表单 (翻译)
- 歌詞:もう少し-Kiroro
- 计算一个表达式的值
- 歌詞:大きな古時計-平井堅