五个学生A,B,C,D,E参加某一向比赛。甲,乙两个人。甲猜比赛名次为A,B,C,D,E结果没有猜中任何一个 名次也没猜中任何一对相临的名次(所谓相邻是指其中没有一对选手在名次上相邻.如1与2或2与3)乙猜D,A,E,C,B 猜中两个学生的名次和相邻的名次..问比赛结果如何..?????我自己不太明白..希望大家帮助
大家来讨论吧!!!!!
另外做一个调查..请把你编程的时间写出..谢(一定要真实)...
#include <stdio.h> /********************************************** 五个学生A,B,C,D,E参加某一向比赛。甲,乙两个人。 甲猜比赛名次为A,B,C,D,E结果没有猜中任何一个 名次也没猜中任何一对相临的名次(所谓相邻是指其中没 有一对选手在名次上相邻.如1与2或2与3)乙猜D,A,E,C,B 猜中两个学生的名次和相邻的名次..问比赛结果如何.. **********************************************/ bool likeFirst(char a[5]) { int i=0; for( i=0;i<5;i++)//甲猜比赛名次为A,B,C,D,E结果没有猜中任何一个 { if('A'+i==a[i]) return true; }
for(i=0;i<4;i++)//名次也没猜中任何一对相临的名次 { if(a[i]-a[i+1]==-1) return true; }
return false; }
bool likeSecond(char a[5]) { int i=0,j=0,n=0,k=0,l=0; char second[5]={'D','A','E','C','B'};
if(likeFirst(a)) return false; n=0; for(i=0;i<5;i++) { if(a[i]==second[i]) { if(n==0) k=i; else l=i; n++; } } if(n!=2) return false;
for(i=0;i<5-1-2;i++) for(j=i+2;j<5-1;j++) { if(k==i && l==i+1 && k!=1) return true; if(k==j && l==j+1) return true; }
return false; }
void main() { char a[6]="ABCDE"; int nn=0;
printf("五个学生A,B,C,D,E参加某一向比赛。\n"); printf("甲,乙两个人。甲猜比赛名次为A,B,C,D,E\n"); printf("结果没有猜中任何一个名次也没猜中任何一对相临的名次\n"); printf("(所谓相邻是指其中没有一对选手在名次上相邻.如1与2或2与3)\n"); printf("乙猜D,A,E,C,B猜中两个学生的名次和相邻的名次..\n"); printf("问比赛结果如何..\n");
for(int i=0;i<5;i++) { a[0]='A'+i; for(int j=0;j<5;j++) { a[1]='A'+j; if(a[0]==a[1]) continue; for(int k=0;k<5;k++) { a[2]='A'+k; if(a[0]==a[2] || a[1]==a[2]) continue; for(int m=0;m<5;m++) { a[3]='A'+m; if(a[0]==a[3] || a[1]==a[3] || a[2]==a[3]) continue; for( int n=0;n<5;n++) { a[4]='A'+n; if(a[0]==a[4] || a[1]==a[4] || a[2]==a[4] || a[3]==a[4]) continue; else if(likeSecond(a)) { nn++; printf("%s ",a); if(nn%5==0) { printf("\n"); } } } } } } } printf("\n"); }
发了我193分钟!!不过程序写的不怎么样!!