一道编程题~
我国有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;
}
