我把第一个例子的程序缩短了,本身是没有这个必要的.不过我还是这样做了.
#include <stdio.h>
struct person
{
char ch;
bool s;
int n;
};
main()
{
int i;
person all[4]={{'A',1,0},{'B',1,3},{'C',1,4},{'D',1,3}};
for(i=0;i<4;i++)
{
int j=0,k=0,l=0;
switch(i)
{case 0: {j=0;break;}
case 1: {j=1;break;}
case 2: {k=2;break;}
case 3: {l=3;break;}}
if(all[1-j].n==i+1||all[1-j].n==0)
if(all[2-k].n==i+1||all[2-k].n==0)
if(all[3-l].n==i+1||all[3-l].n==0)
all[i].s=0;
}
for(i=0;i<4;i++)
if(all[i].s==0)
printf("说假话的是:%c\n",all[i].ch);
}
#include<iostream.h>
//1.四人中的一人做了好事,不留名,校长问是谁做的:
//A说:不是我
//B说:是C
//C说:是D
//D说:C说谎
//三人说的是真话,一人说假话。编一程序找出做好事的人
int aa[4];
void fuzhi(int a)
{
if(a==1) {aa[0]=0,aa[1]=0,aa[2]=0,aa[3]=1;}
if(a==2) {aa[0]=1,aa[1]=0,aa[2]=0,aa[3]=1;}
if(a==3) {aa[0]=1,aa[1]=1,aa[2]=0,aa[3]=1;}
if(a==4) {aa[0]=1,aa[1]=0,aa[2]=1,aa[3]=0;}
}
int panduan(int y)
{
fuzhi(y);
if((aa[0]+aa[1]+aa[2]+aa[3])!=3) return 0;
else return 1;
}
main()
{
//if x=1 ,2,3,4则表示a,b,c,d做的好事
for(int x=1;x<5;x++)
if(panduan(x)==1) break;
if(x==1) cout<<"A做的好事"<<endl;
if(x==2) cout<<"B做的好事"<<endl;
if(x==3) cout<<"C做的好事"<<endl;
if(x==4) cout<<"D做的好事"<<endl;
}
//第二题:
#include<iostream.h>
int pandun1(int a,int b)
{
if(a+b>=1) return 1;
return 0;
}
int pandun2(int a,int b,int c)
{
if(a+b+c>=2) return 1;
return 0;
}
int pandun3(int a,int b)
{
if(a*b==0) return 1;
return 0;
}
int pandun4(int a,int b)
{
if(a+b==0||a+b==2)return 1;
return 0;
}
int pandun5(int a,int b)
{
if(a+b==1)return 1;
return 0;
}
int pandun6(int a,int b)
{
if(a!=1&&b==1)return 0;
return 1;
}
int zhonghe(int k1,int k2,int k3,int k4,int k5,int k6)
{
if(pandun1(k1,k2)+pandun2(k1,k5,k6)+pandun3(k1,k4)+pandun4(k2,k3)+pandun5(k3,k4)+pandun6(k4,k5)==6)return 1;
return 0;
}
void main()
{
int a,b,c,d,e,f;
for( a=0;a<2;a++)
for( b=0;b<2;b++)
for( c=0;c<2;c++)
for( d=0;d<2;d++)
for( e=0;e<2;e++)
for( f=0;f<2;f++)
if(zhonghe(a,b,c,d,e,f)==1) goto end;
end:
if(a==1) cout<<"A参与了作案!"<<endl;
if(b==1) cout<<"B参与了作案!"<<endl;
if(c==1) cout<<"C参与了作案!"<<endl;
if(d==1) cout<<"D参与了作案!"<<endl;
if(e==1) cout<<"E参与了作案!"<<endl;
if(f==1) cout<<"F参与了作案!"<<endl;
}
不是吧~~~真的10行就可以?????!!!
我的~~~
#include<iostream.h>
struct p{char na;int k;int s[4];};
void main()
{
p a[4]={{'A',0,{-1,0,0,0}},{'B',0,{-1,-1,1,-1}},{'C',0,{-1,-1,-1,1}},{'D',0,{0,0,0,-1}}};
for(int i=0;i<4;i++)for(int j=i;j<4;j++)
{
if(i==j)continue;
int temp=0;
for(int k=0;k<4;k++)temp += (((a[i].s[k] * a[j].s[k])>=0) ? 0 : 1);
if(temp)a[i].k++,a[j].k++;
}
for(i=0;i<4;i++)if(a[i].k > 1)cout << "说谎者是:" << a[i].na << endl;
}
[此贴子已经被作者于2005-11-13 14:42:14编辑过]
[此贴子已经被作者于2005-11-19 0:07:54编辑过]