
 
										
					
	 2005-11-04 21:20
	    2005-11-04 21:20
   2005-11-06 09:28
	    2005-11-06 09:28
   2005-11-06 10:00
	    2005-11-06 10:00
   2005-11-08 15:19
	    2005-11-08 15:19
  我把第一个例子的程序缩短了,本身是没有这个必要的.不过我还是这样做了.
#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);
}

 2005-11-11 19:19
	    2005-11-11 19:19
   2005-11-12 23:26
	    2005-11-12 23:26
  #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;
   
}

 2005-11-12 23:26
	    2005-11-12 23:26
  //第二题:
#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;
}

 2005-11-12 23:28
	    2005-11-12 23:28
   不是吧~~~真的10行就可以?????!!!
不是吧~~~真的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-13 14:40
	    2005-11-13 14:40
  [此贴子已经被作者于2005-11-19 0:07:54编辑过]

 2005-11-19 00:07
	    2005-11-19 00:07