一道编程题~
我国有4大淡水湖。 A说:洞庭湖最大,洪泽最小。鄱阳湖第三。
B说:洪泽湖最大,洞庭湖最小,鄱阳湖第二。太湖第三。
C说:洪泽湖最小,洞庭湖第三。
D说:鄱阳湖最大,太湖最小,洪泽湖第二,洞庭湖第三。
4个人每人仅答对了一个,请你编程给出4个湖从大到小的顺序
用C语言或C++编程,如何组织```需要全部过程
这段时间有人单独给九九出考题了~不能多说情况~帮忙看看就行了~
#include<stdio.h> //1 洞庭湖 //3 鄱阳湖 //2 太湖 //0 洪泽湖 char s[4][8]={"洪泽湖","洞庭湖","太湖","鄱阳湖"}; int a[4]={2,-1,4,1}; //A认为的次序 -1表示不知道 int b[4]={1,4,3,2}; //B... int c[4]={-1,-1,2,1}; //C... int d[4]={4,1,2,3}; //D... int e[4]; int fun(int a[],int b[],int c[],int d[] ,int e[]) //代入去验算是否有每个人都只答对一个 { //数组a,b,c,d一直不会变,变得是数组e int fla[4]={0}; int i; for(i = 0; i < 4; i++) { if(a[i]==e[i]) fla[0]++; //答对一个湖加1 if(b[i] == e[i]) fla[1]++; if(c[i] == e[i]) fla[2]++; if(d[i] == e[i]) fla[3]++; } if(fla[0]==1 && fla[1]==1 && fla[2]==1 && fla[3]==1) //每个人只答对一个湖 { return 1; } return 0; } int main(void) { int i, j, k, t; for(i=1;i<5;i++) /*对四湖排名分别赋值*/ for(j=1;j<5;j++) for(k=1;k<5;k++) for(t=1;t<5;t++) if(i+j+k+t==10&&i*j*k*t==24) //4个数字必须要不一样 { e[0]=i, e[1]=j, e[2]=k, e[3]=t; if(fun(a,b,c,d,e)) { printf("%-9s%-9s%-9s%-9s\n",s[i-1],s[j-1],s[k-1],s[t-1]); return 0; } } return 0; }
[此贴子已经被作者于2017-2-9 14:54编辑过]
/* 我国有4大淡水湖。 A说:洞庭湖最大,洪泽最小。鄱阳湖第三。 B说:洪泽湖最大,洞庭湖最小,鄱阳湖第二。太湖第三。 C说:洪泽湖最小,洞庭湖第三。 D说:鄱阳湖最大,太湖最小,洪泽湖第二,洞庭湖第三。 4个人每人仅答对了一个,请你编程给出4个湖从大到小的顺序 用C语言或C++编程,如何组织```需要全部过程 */ #include<stdio.h> int main() { char *p[]={"洞庭湖","洪泽湖","鄱阳湖","太湖"}; int a[24][4]= { {1,2,3,4},{1,2,4,3},{1,3,2,4},{1,3,4,2},{1,4,2,3},{1,4,3,2}, {2,1,3,4},{2,1,4,3},{2,3,1,4},{2,3,4,1},{2,4,1,3},{2,4,3,1}, {3,1,2,4},{3,1,4,2},{3,2,1,4},{3,2,4,1},{3,4,1,2},{3,4,2,1}, {4,1,2,3},{4,1,3,2},{4,2,1,3},{4,2,3,1},{4,3,1,2},{4,3,2,1} }; int i=0; int j=0; for (i=0;i<24;i++) { int flag=0; if (((a[i][0]==1)+(a[i][1]==4)+(a[i][2]==3))==1) flag++; if (((a[i][1]==1)+(a[i][0]==4)+(a[i][2]==2)+(a[i][3]==3))==1) flag++; if (((a[i][1]==4)+(a[i][0]==3))==1) flag++; if (((a[i][2]==1)+(a[i][3]==4)+(a[i][1]==2)+(a[i][0]==3))==1) flag++; if (flag==4) for (j=0;j<4;j++) printf("%-10s%d\n",p[j],a[i][j]); } return 0; }
[此贴子已经被作者于2017-2-9 15:32编辑过]
#include <cstdio> #include <algorithm> bool foo( const char* a, const char* b ) { size_t cnt = 0; for( size_t i=0; i!=4; ++i ) cnt += a[i]==b[i]; return cnt==1; } int main( void ) { const char* ns[] = { "鄱阳", "洞庭", "太湖", "洪泽" }; const char* as[] = { "2314", "4132", "0024", "1423" }; char buf[] = "1234"; do if( foo(buf,as[0]) && foo(buf,as[1]) && foo(buf,as[2]) && foo(buf,as[3]) ) printf( "%s %s %s %s\n", ns[buf[0]-'1'], ns[buf[1]-'1'], ns[buf[2]-'1'], ns[buf[3]-'1'] ); while( std::next_permutation(buf,buf+4) ); return 0; }
//第一种(C++): #include //预编译命令 using namespace std; int main() //主函数 { //主函数开始 int Dt,Hz,Py,Th,sum[4]={0,0,0,0}; //定义变量 char lake[5][10]; //Dt表示洞庭湖,Hz表示洪泽湖,Py表示鄱阳湖,Th表示太湖 //穷举四大湖排名的所有可能,用1、2、3、4分别来表示它们的大小关系 //1最大,4最小 for(Dt=1; Dt=4; Dt++){ for(Hz=1; Hz=4; Hz++){ if(Dt==Hz) continue;//湖的面积各不相同 for(Py=1; Py=4; Py++){ if(Py==Hz || Py==Dt) continue;//湖的面积各不相同 Th=10-Dt-Hz-Py;//计算太湖的排名 sum[0]= (1==Dt) + (4==Hz) + (3==Py);//A说的话 sum[1]= (1==Hz) + (4==Dt) + (2==Py) + (3==Th);//B说的话 sum[2]= (4==Hz) + (3==Dt);//C说的话 sum[3]= (1==Py) + (4==Th) + (2==Hz) + (3==Dt);//D说的话 if(sum[0]==1 && sum[1]==1 && sum[2]==1 && sum[3]==1){ strcpy (lake[Dt], "洞庭湖");//按排名赋值 strcpy (lake[Hz], "洪泽湖"); strcpy (lake[Py], "鄱阳湖"); strcpy (lake[Th], "太湖"); } } } } for(int i=1;i=4;i++){ coutlake[i]endl;//从大到小输出 } return 0;//主函数结束 } //第二种(c语言): #include int main(void) { int a,b,c,d; /*四湖的顺序数,分别表示洞庭湖,洪泽湖,鄱阳湖,太湖*/ for(a=1;a5;a++) /*对四湖排名分别赋值*/ for(b=1;b5;b++) for(c=1;c5;c++) for(d=1;d5;d++) if(a+b+c+d==10&&a*b*c*d==24) /*限定abcd的值互不相等,即不出现并列的情况*/ if(a==1&&b!=4&&c!=3||a!=1&&b==4&&c!=3||a!=1&&b!=4&&c==3) /*A的话*/ if(b==1&&a!=4&&c!=2&&d!=3||b!=1&&a==4&&c!=2&&d!=3 ||b!=1&&a!=4&&c==2&&d!=3||b!=1&&a!=4&&c!=2&&d==3) /*B的话*/ if(b==4&&a!=3||b!=4&&a==3) /*C的话*/ if(c==1&&d!=4&&b!=2&&a!=3||c!=1&&d==4&&b!=2&&a!=3 ||c!=1&&d!=4&&b==2&&a!=3||c!=1&&d!=4&&b!=2&&a==3) /*D的话*/ printf("四湖的大小顺序:\n洞庭湖:%d\n洪泽湖:%d\n鄱阳湖:%d\n太湖:%d\n",a,b,c,d); return 0; }