CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  专题开发/技术/项目 >  数据结构与算法

10个棋子摆在四行四列,每行每列棋子数都是偶数

楼主littleplayboy(大头)2002-03-28 07:58:27 在 专题开发/技术/项目 / 数据结构与算法 提问

棋盘四行四列  
  用十个棋子摆在格子上。  
  使得每行和每列的棋子数都是偶数  
   
  这十个棋子怎么摆?  
   
   
  问题点数:50、回复次数:50Top

1 楼bjay(ben)回复于 2002-03-28 08:18:56 得分 0

先将8个棋子摆成两行四列并编号从左到右从上到下1...8。  
  再将第九个与第一个放在一起,第十个与第四个放在一起。Top

2 楼littleplayboy(大头)回复于 2002-03-28 08:30:06 得分 0

请ben兄讲清楚一点好吗?  
   
  抱歉,我题好像没说清楚  
  使得每行和每列的棋子的数量都是偶数  
  每个格子上只能放一个棋子  
   
   
  Top

3 楼littleplayboy(大头)回复于 2002-03-28 08:54:44 得分 0

怎么编程求出这个问题也可以呀Top

4 楼LLnju(LLnju)回复于 2002-03-28 09:30:44 得分 0

方法太多了,下面是一种。你只需要考虑   6   个棋子怎么摆就行了  
  XOXO  
  XXOO  
  0XX0  
  0000Top

5 楼happylife168(如意人生)回复于 2002-03-28 09:58:13 得分 0

XXOO  
  OXXO  
  OOXX  
  XOOXTop

6 楼whgwj()回复于 2002-03-28 11:08:41 得分 0

关注,怎样用编程解,Top

7 楼wd_xg2_yl(神仙!妖怪!)回复于 2002-03-28 11:37:13 得分 10

//棋盘四行四列  
  //用十个棋子摆在格子上。  
  //使得每行和每列的棋子数都是偶数  
  //这十个棋子怎么摆?  
   
  #include   "stdio.h"  
  #include   "conio.h"  
  char   matrix[4][4]={'*','*','*','*',  
                                        '*','*','*','*',  
                                        '*','*','*','*',  
                                        '*','*','*','*'};  
  bool   check(){  
  int   x,y;  
  for(x=0;x<4;x++){  
  int   count=0;  
  for(y=0;y<4;y++)if(matrix[x][y]==0)count++;  
  if(count%2!=0)return   false;  
  }  
  for(y=0;y<4;y++){  
  int   count=0;  
  for(x=0;x<4;x++)if(matrix[x][y]==0)count++;  
  if(count%2!=0)return   false;  
  }  
  return   true;  
  }  
   
  main()  
  {  
    int   i1,i2,i3,i4,i5,i6;  
    for(i1=15,matrix[i1/4][i1%4]=0;i1>=5;i1--)  
          for(i2=i1-1,matrix[i2/4][i2%4]=0;i2>=4;i2--)  
                for(i3=i2-1,matrix[i3/4][i3%4]=0;i3>=3;i3--)  
                      for(i4=i3-1,matrix[i4/4][i4%4]=0;i4>=2;i4--)  
                            for(i5=i4-1,matrix[i5/4][i5%4]=0;i5>=1;i5--)  
                                  for(i6=i5-1,matrix[i6/4][i6%4]=0;i6>=0;i6--)  
                      {  
    matrix[i1/4][i1%4]=0;  
    matrix[i2/4][i2%4]=0;  
                                        matrix[i3/4][i3%4]=0;  
    matrix[i4/4][i4%4]=0;  
    matrix[i5/4][i5%4]=0;  
    matrix[i6/4][i6%4]=0;  
    if(check()==false)                         for(int   i=0;i<16;i++)matrix[i/4][i%4]='*';  
    else  
                                      {             for(int   i=15;i>=0;i--)  
                {             if((i+1)%4==0)printf("\n");                               if(matrix[i/4][i%4]==0)  
                                                        printf("     ");  
                                                  else  
                                                        printf("   *");           }  
                                            printf("\npress   a   key   to   continue!!!!\n");  
                                            getch();  
                                            for(int   k=0;k<16;k++)matrix[k/4][k%4]='*';  
  }  
                  }  
  }  
  Top

8 楼joneshwp(蜜蜂)回复于 2002-03-28 11:37:56 得分 0

如意人生,你还少了两个呢?被你吃了?:)  
  其实有一行必须全满,这个问题跟小鸟与笼子的问题一样的,有11只小鸟,仅只有10个笼,那么肯定会有一个笼有2只鸟。Top

9 楼wd_xg2_yl(神仙!妖怪!)回复于 2002-03-28 11:43:32 得分 0

大概有100多种排列法!!Top

10 楼gcd0318(gcd0318)回复于 2002-03-28 13:02:58 得分 0

xoxo  
  xxoo  
  xxxx  
  xooxTop

11 楼lbl20020123(天天)回复于 2002-03-28 20:48:23 得分 0

谁能编程输出所有的排列?Top

12 楼LeeMaRS(小菜虎,仍需努力)回复于 2002-03-28 23:31:54 得分 0

#include   "iostream.h"  
   
  int   map[4][4]={{1,1,1,1},  
                                {1,1,1,1},  
                                {1,1,1,1},  
                                {1,1,1,1}};  
   
  int   total=6;  
   
  void   fillmap(int,int);  
  void   PD();  
   
  void   PD()  
  {  
      int   x,y,flag=0,n1,n2;  
   
      for   (x=0;x<=3;x++)  
      {  
          flag=1;n1=0;n2=0;  
          for   (y=0;y<=3;y++)  
          {  
              n1+=map[x][y];  
              n2+=map[y][x];  
          }  
          if   (n1   ==   0   ||   n2   ==   0   ||   n1   %   2   !=0   ||   n2   %   2   !=0)  
              break;  
          else  
              flag=0;  
      }  
   
      if   (flag==0)  
      {  
          for   (x=0;x<=3;x++)  
          {  
              for   (y=0;y<=3;y++)  
                  if   (map[x][y]==1)  
                      cout<<"*";  
                  else  
                      cout<<"   ";  
              cout<<endl;  
          }  
          cout<<endl;  
      }  
  }  
   
  void   fillmap(int   x,int   y)  
  {  
      if   (total==0)  
          PD();  
      else   if   (x<=3   &&   total>0)  
      {  
          total--;  
          map[x][y]=0;  
          if   (y==3)  
              fillmap(x+1,0);  
          else  
              fillmap(x,y+1);  
          map[x][y]=1;  
          total++;  
   
          if   (y==3)  
              fillmap(x+1,1);  
          else  
              fillmap(x,y+1);  
      }  
  }  
   
  void   main()  
  {  
      fillmap(0,0);  
  }Top

13 楼LeeMaRS(小菜虎,仍需努力)回复于 2002-03-28 23:33:04 得分 10

sorry.上面的程序有点错.  
   
  #include   "iostream.h"  
   
  int   map[4][4]={{1,1,1,1},  
                                {1,1,1,1},  
                                {1,1,1,1},  
                                {1,1,1,1}};  
   
  int   total=6;  
   
  void   fillmap(int,int);  
  void   PD();  
   
  void   PD()  
  {  
      int   x,y,flag=0,n1,n2;  
   
      for   (x=0;x<=3;x++)  
      {  
          flag=1;n1=0;n2=0;  
          for   (y=0;y<=3;y++)  
          {  
              n1+=map[x][y];  
              n2+=map[y][x];  
          }  
          if   (n1   ==   0   ||   n2   ==   0   ||   n1   %   2   !=   0   ||   n2   %   2   !=   0)  
              break;  
          else  
              flag=0;  
      }  
   
      if   (flag==0)  
      {  
          for   (x=0;x<=3;x++)  
          {  
              for   (y=0;y<=3;y++)  
                  if   (map[x][y]==1)  
                      cout<<"*";  
                  else  
                      cout<<"   ";  
              cout<<endl;  
          }  
          cout<<endl;  
      }  
  }  
   
  void   fillmap(int   x,int   y)  
  {  
      if   (total==0)  
          PD();  
      else   if   (x<=3   &&   total>0)  
      {  
          total--;  
          map[x][y]=0;  
          if   (y==3)  
              fillmap(x+1,0);  
          else  
              fillmap(x,y+1);  
          map[x][y]=1;  
          total++;  
   
          if   (y==3)  
              fillmap(x+1,0);  
          else  
              fillmap(x,y+1);  
      }  
  }  
   
  void   main()  
  {  
      fillmap(0,0);  
  }Top

14 楼matic(君竹)回复于 2002-03-29 12:08:12 得分 0

考虑6个就行了Top

15 楼bjay(ben)回复于 2002-03-30 11:57:36 得分 0

说到底只有二种情况,其它都是变形。  
  XXXX  
  XX00  
  X0X0  
  X00X  
   
  XXXX  
  XXXX  
  X000  
  X000  
  证明如下:  
  由鸽笼原理知必有一行至少为3个,由由条件必有一行为4个。  
  剩下的6个在三行四列中,又由鸽笼原理和条件知必有一列为4个。  
  这样就只剩下3个在三行三列中,这3个只有两种放法。  
  1、任意两个不在同一行同一列中;2、全在同一行或同一列中。  
   
  至于有多少种放法。这是一个组合问题。Top

16 楼vagrant_zy(Anders tempter)回复于 2002-03-30 14:10:43 得分 0

每行都是偶数啊  
  XXXX  
  XXXX  
  X000  
  X000  
  不对Top

17 楼huahao0672(熾天使)回复于 2002-03-31 17:44:30 得分 0

这个问题比较有趣,我要想一想。  
  编程找出所有的排列。Top

18 楼LeeMaRS(小菜虎,仍需努力)回复于 2002-03-31 17:45:26 得分 0

我的程序可以输出所有的排列情况了.Top

19 楼tiantian_2001(田田)回复于 2002-04-01 11:38:52 得分 10

0011  
  0101  
  1001  
  1111  
  **************  
  0011  
  0101  
  1111  
  1001  
  **************  
  0011  
  0110  
  1010  
  1111  
  **************  
  0011  
  0110  
  1111  
  1010  
  **************  
  0011  
  1001  
  0101  
  1111  
  **************  
  0011  
  1001  
  1111  
  0101  
  **************  
  0011  
  1010  
  0110  
  1111  
  **************  
  0011  
  1010  
  1111  
  0110  
  **************  
  0011  
  1111  
  0101  
  1001  
  **************  
  0011  
  1111  
  0110  
  1010  
  **************  
  0011  
  1111  
  1001  
  0101  
  **************  
  0011  
  1111  
  1010  
  0110  
  **************  
  0101  
  0011  
  1001  
  1111  
  **************  
  0101  
  0011  
  1111  
  1001  
  **************  
  0101  
  0110  
  1100  
  1111  
  **************  
  0101  
  0110  
  1111  
  1100  
  **************  
  0101  
  1001  
  0011  
  1111  
  **************  
  0101  
  1001  
  1111  
  0011  
  **************  
  0101  
  1100  
  0110  
  1111  
  **************  
  0101  
  1100  
  1111  
  0110  
  **************  
  0101  
  1111  
  0011  
  1001  
  **************  
  0101  
  1111  
  0110  
  1100  
  **************  
  0101  
  1111  
  1001  
  0011  
  **************  
  0101  
  1111  
  1100  
  0110  
  **************  
  0110  
  0011  
  1010  
  1111  
  **************  
  0110  
  0011  
  1111  
  1010  
  **************  
  0110  
  0101  
  1100  
  1111  
  **************  
  0110  
  0101  
  1111  
  1100  
  **************  
  0110  
  1010  
  0011  
  1111  
  **************  
  0110  
  1010  
  1111  
  0011  
  **************  
  0110  
  1100  
  0101  
  1111  
  **************  
  0110  
  1100  
  1111  
  0101  
  **************  
  0110  
  1111  
  0011  
  1010  
  **************  
  0110  
  1111  
  0101  
  1100  
  **************  
  0110  
  1111  
  1010  
  0011  
  **************  
  0110  
  1111  
  1100  
  0101  
  **************  
  1001  
  0011  
  0101  
  1111  
  **************  
  1001  
  0011  
  1111  
  0101  
  **************  
  1001  
  0101  
  0011  
  1111  
  **************  
  1001  
  0101  
  1111  
  0011  
  **************  
  1001  
  1010  
  1100  
  1111  
  **************  
  1001  
  1010  
  1111  
  1100  
  **************  
  1001  
  1100  
  1010  
  1111  
  **************  
  1001  
  1100  
  1111  
  1010  
  **************  
  1001  
  1111  
  0011  
  0101  
  **************  
  1001  
  1111  
  0101  
  0011  
  **************  
  1001  
  1111  
  1010  
  1100  
  **************  
  1001  
  1111  
  1100  
  1010  
  **************  
  1010  
  0011  
  0110  
  1111  
  **************  
  1010  
  0011  
  1111  
  0110  
  **************  
  1010  
  0110  
  0011  
  1111  
  **************  
  1010  
  0110  
  1111  
  0011  
  **************  
  1010  
  1001  
  1100  
  1111  
  **************  
  1010  
  1001  
  1111  
  1100  
  **************  
  1010  
  1100  
  1001  
  1111  
  **************  
  1010  
  1100  
  1111  
  1001  
  **************  
  1010  
  1111  
  0011  
  0110  
  **************  
  1010  
  1111  
  0110  
  0011  
  **************  
  1010  
  1111  
  1001  
  1100  
  **************  
  1010  
  1111  
  1100  
  1001  
  **************  
  1100  
  0101  
  0110  
  1111  
  **************  
  1100  
  0101  
  1111  
  0110  
  **************  
  1100  
  0110  
  0101  
  1111  
  **************  
  1100  
  0110  
  1111  
  0101  
  **************  
  1100  
  1001  
  1010  
  1111  
  **************  
  1100  
  1001  
  1111  
  1010  
  **************  
  1100  
  1010  
  1001  
  1111  
  **************  
  1100  
  1010  
  1111  
  1001  
  **************  
  1100  
  1111  
  0101  
  0110  
  **************  
  1100  
  1111  
  0110  
  0101  
  **************  
  1100  
  1111  
  1001  
  1010  
  **************  
  1100  
  1111  
  1010  
  1001  
  **************  
  1111  
  0011  
  0101  
  1001  
  **************  
  1111  
  0011  
  0110  
  1010  
  **************  
  1111  
  0011  
  1001  
  0101  
  **************  
  1111  
  0011  
  1010  
  0110  
  **************  
  1111  
  0101  
  0011  
  1001  
  **************  
  1111  
  0101  
  0110  
  1100  
  **************  
  1111  
  0101  
  1001  
  0011  
  **************  
  1111  
  0101  
  1100  
  0110  
  **************  
  1111  
  0110  
  0011  
  1010  
  **************  
  1111  
  0110  
  0101  
  1100  
  **************  
  1111  
  0110  
  1010  
  0011  
  **************  
  1111  
  0110  
  1100  
  0101  
  **************  
  1111  
  1001  
  0011  
  0101  
  **************  
  1111  
  1001  
  0101  
  0011  
  **************  
  1111  
  1001  
  1010  
  1100  
  **************  
  1111  
  1001  
  1100  
  1010  
  **************  
  1111  
  1010  
  0011  
  0110  
  **************  
  1111  
  1010  
  0110  
  0011  
  **************  
  1111  
  1010  
  1001  
  1100  
  **************  
  1111  
  1010  
  1100  
  1001  
  **************  
  1111  
  1100  
  0101  
  0110  
  **************  
  1111  
  1100  
  0110  
  0101  
  **************  
  1111  
  1100  
  1001  
  1010  
  **************  
  1111  
  1100  
  1010  
  1001  
  **************  
  0011  
  0101  
  1001  
  1111  
  **************  
  0011  
  0101  
  1111  
  1001  
  **************  
  0011  
  0110  
  1010  
  1111  
  **************  
  0011  
  0110  
  1111  
  1010  
  **************  
  0011  
  1001  
  0101  
  1111  
  **************  
  0011  
  1001  
  1111  
  0101  
  **************  
  0011  
  1010  
  0110  
  1111  
  **************  
  0011  
  1010  
  1111  
  0110  
  **************  
  0011  
  1111  
  0101  
  1001  
  **************  
  0011  
  1111  
  0110  
  1010  
  **************  
  0011  
  1111  
  1001  
  0101  
  **************  
  0011  
  1111  
  1010  
  0110  
  **************  
  0101  
  0011  
  1001  
  1111  
  **************  
  0101  
  0011  
  1111  
  1001  
  **************  
  0101  
  0110  
  1100  
  1111  
  **************  
  0101  
  0110  
  1111  
  1100  
  **************  
  0101  
  1001  
  0011  
  1111  
  **************  
  0101  
  1001  
  1111  
  0011  
  **************  
  0101  
  1100  
  0110  
  1111  
  **************  
  0101  
  1100  
  1111  
  0110  
  **************  
  0101  
  1111  
  0011  
  1001  
  **************  
  0101  
  1111  
  0110  
  1100  
  **************  
  0101  
  1111  
  1001  
  0011  
  **************  
  0101  
  1111  
  1100  
  0110  
  **************  
  0110  
  0011  
  1010  
  1111  
  **************  
  0110  
  0011  
  1111  
  1010  
  **************  
  0110  
  0101  
  1100  
  1111  
  **************  
  0110  
  0101  
  1111  
  1100  
  **************  
  0110  
  1010  
  0011  
  1111  
  **************  
  0110  
  1010  
  1111  
  0011  
  **************  
  0110  
  1100  
  0101  
  1111  
  **************  
  0110  
  1100  
  1111  
  0101  
  **************  
  0110  
  1111  
  0011  
  1010  
  **************  
  0110  
  1111  
  0101  
  1100  
  **************  
  0110  
  1111  
  1010  
  0011  
  **************  
  0110  
  1111  
  1100  
  0101  
  **************  
  1001  
  0011  
  0101  
  1111  
  **************  
  1001  
  0011  
  1111  
  0101  
  **************  
  1001  
  0101  
  0011  
  1111  
  **************  
  1001  
  0101  
  1111  
  0011  
  **************  
  1001  
  1010  
  1100  
  1111  
  **************  
  1001  
  1010  
  1111  
  1100  
  **************  
  1001  
  1100  
  1010  
  1111  
  **************  
  1001  
  1100  
  1111  
  1010  
  **************  
  1001  
  1111  
  0011  
  0101  
  **************  
  1001  
  1111  
  0101  
  0011  
  **************  
  1001  
  1111  
  1010  
  1100  
  **************  
  1001  
  1111  
  1100  
  1010  
  **************  
  1010  
  0011  
  0110  
  1111  
  **************  
  1010  
  0011  
  1111  
  0110  
  **************  
  1010  
  0110  
  0011  
  1111  
  **************  
  1010  
  0110  
  1111  
  0011  
  **************  
  1010  
  1001  
  1100  
  1111  
  **************  
  1010  
  1001  
  1111  
  1100  
  **************  
  1010  
  1100  
  1001  
  1111  
  **************  
  1010  
  1100  
  1111  
  1001  
  **************  
  1010  
  1111  
  0011  
  0110  
  **************  
  1010  
  1111  
  0110  
  0011  
  **************  
  1010  
  1111  
  1001  
  1100  
  **************  
  1010  
  1111  
  1100  
  1001  
  **************  
  1100  
  0101  
  0110  
  1111  
  **************  
  1100  
  0101  
  1111  
  0110  
  **************  
  1100  
  0110  
  0101  
  1111  
  **************  
  1100  
  0110  
  1111  
  0101  
  **************  
  1100  
  1001  
  1010  
  1111  
  **************  
  1100  
  1001  
  1111  
  1010  
  **************  
  1100  
  1010  
  1001  
  1111  
  **************  
  1100  
  1010  
  1111  
  1001  
  **************  
  1100  
  1111  
  0101  
  0110  
  **************  
  1100  
  1111  
  0110  
  0101  
  **************  
  1100  
  1111  
  1001  
  1010  
  **************  
  1100  
  1111  
  1010  
  1001  
  **************  
  1111  
  0011  
  0101  
  1001  
  **************  
  1111  
  0011  
  0110  
  1010  
  **************  
  1111  
  0011  
  1001  
  0101  
  **************  
  1111  
  0011  
  1010  
  0110  
  **************  
  1111  
  0101  
  0011  
  1001  
  **************  
  1111  
  0101  
  0110  
  1100  
  **************  
  1111  
  0101  
  1001  
  0011  
  **************  
  1111  
  0101  
  1100  
  0110  
  **************  
  1111  
  0110  
  0011  
  1010  
  **************  
  1111  
  0110  
  0101  
  1100  
  **************  
  1111  
  0110  
  1010  
  0011  
  **************  
  1111  
  0110  
  1100  
  0101  
  **************  
  1111  
  1001  
  0011  
  0101  
  **************  
  1111  
  1001  
  0101  
  0011  
  **************  
  1111  
  1001  
  1010  
  1100  
  **************  
  1111  
  1001  
  1100  
  1010  
  **************  
  1111  
  1010  
  0011  
  0110  
  **************  
  1111  
  1010  
  0110  
  0011  
  **************  
  1111  
  1010  
  1001  
  1100  
  **************  
  1111  
  1010  
  1100  
  1001  
  **************  
  1111  
  1100  
  0101  
  0110  
  **************  
  1111  
  1100  
  0110  
  0101  
  **************  
  1111  
  1100  
  1001  
  1010  
  **************  
  1111  
  1100  
  1010  
  1001  
  **************  
  Top

20 楼tiantian_2001(田田)回复于 2002-04-01 11:39:42 得分 0

共96个Top

21 楼tiantian_2001(田田)回复于 2002-04-01 11:42:41 得分 0

var   a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p:integer;  
          ii,jj:integer;  
          findit:boolean;  
          counti:array[1..4]   of   integer;  
          countj:array[1..4]   of   integer;  
          count:integer;  
          findcount:integer;  
          qiziarray:array[1..4]   of   array[1..4]   of   integer;  
  begin  
      findcount:=0;  
      for   a:=0   to   1   do       //1  
      for   b:=0   to   1   do       //2  
      for   c:=0   to   1   do       //3  
      for   d:=0   to   1   do       //4  
      for   e:=0   to   1   do       //5  
      for   f:=0   to   1   do       //6  
      for   g:=0   to   1   do       //7  
      for   h:=0   to   1   do       //8  
      for   i:=0   to   1   do       //9  
      for   j:=0   to   1   do       //10  
      for   k:=0   to   1   do       //11  
      for   l:=0   to   1   do       //12  
      for   m:=0   to   1   do       //13  
      for   n:=0   to   1   do       //14  
      for   o:=0   to   1   do       //15  
      for   p:=0   to   1   do       //16  
      begin  
          findit:=true;  
          qiziarray[1,1]:=a;  
          qiziarray[1,2]:=b;  
          qiziarray[1,3]:=c;  
          qiziarray[1,4]:=d;//1  
          qiziarray[2,1]:=e;  
          qiziarray[2,2]:=f;  
          qiziarray[2,3]:=g;  
          qiziarray[2,4]:=h;   //2  
          qiziarray[3,1]:=i;  
          qiziarray[3,2]:=j;  
          qiziarray[3,3]:=k;  
          qiziarray[3,4]:=l;   //3  
          qiziarray[4,1]:=m;  
          qiziarray[4,2]:=n;  
          qiziarray[4,3]:=o;  
          qiziarray[4,4]:=p;   //4  
   
              counti[1]:=0;  
              counti[2]:=0;  
              counti[3]:=0;  
              counti[4]:=0;  
              countj[1]:=0;  
              countj[2]:=0;  
              countj[3]:=0;  
              countj[4]:=0;  
              count:=0;  
   
              for   ii:=1   to   4   do  
              for   jj:=   1   to   4   do  
              if   qiziarray[ii,jj]<>0   then  
              begin  
                  inc(counti[ii],1);  
                  inc(countj[jj],1);  
                  inc(count,1);  
              end;  
   
              if   (count<>10)   or   (counti[1]   mod   2<>0)or(counti[2]   mod   2<>0)or  
                  (counti[3]   mod   2<>0)or(counti[4]   mod   2<>0)or  
                  (countj[1]   mod   2<>0)or(countj[2]   mod   2<>0)or  
                  (countj[3]   mod   2<>0)or(countj[4]   mod   2<>0)   then  
              begin  
                findit:=false;  
              end;  
              if   findit   then  
              begin  
              richedit1.lines.add(inttostr(qiziarray[1,1])+''+inttostr(qiziarray[1,2])+''+  
                    inttostr(qiziarray[1,3]   )+''+inttostr(qiziarray[1,4]   ));  
              richedit1.lines.add(inttostr(qiziarray[2,1])+''+inttostr(qiziarray[2,2])+''+  
                    inttostr(qiziarray[2,3]   )+''+inttostr(qiziarray[2,4]   ));  
              richedit1.lines.add(inttostr(qiziarray[3,1])+''+inttostr(qiziarray[3,2])+''+  
                    inttostr(qiziarray[3,3]   )+''+inttostr(qiziarray[3,4]   ));  
              richedit1.lines.add(inttostr(qiziarray[4,1])+''+inttostr(qiziarray[4,2])+''+  
                    inttostr(qiziarray[4,3]   )+''+inttostr(qiziarray[4,4]   ));  
              inc(findcount);  
              richedit1.lines.add('**************');  
              end;  
        end;  
        if   findcount>0   then   showmessage(floattostr(findcount));  
  end;  
  Top

22 楼bjay(ben)回复于 2002-04-01 11:45:08 得分 0

to:vagrant_zy(如果可能不)  
  对不起,一时没注意,错了。  
  将那种排法去掉。Top

23 楼magicfox(魔狐狸)回复于 2002-04-01 20:21:04 得分 0

精彩Top

24 楼littleplayboy(大头)回复于 2002-04-01 21:15:11 得分 0

呵呵,精彩  
  16层循环Top

25 楼LeeMaRS(小菜虎,仍需努力)回复于 2002-04-01 22:51:32 得分 0

……像我这样写成递归不好么……Top

26 楼colacoca(我是一瓶倒过来的可口可乐)回复于 2002-04-02 09:03:53 得分 2

leemars(小菜虎)   你的这段程序绝对有问题  
   
  void   PD()  
  {  
      int   x,y,flag=0,n1,n2;  
   
      for   (x=0;x<=3;x++)  
      {  
          flag=1;n1=0;n2=0;  
          for   (y=0;y<=3;y++)  
          {  
              n1+=map[x][y];  
              n2+=map[y][x];  
          }  
          if   (n1   ==   0   ||   n2   ==   0   ||   n1   %   2   !=   0   ||   n2   %   2   !=   0)  
              break;  
          else  
              flag=0;  
      }  
   
  每行每列是否是偶数好像没有判断好  
  递归程序没问题的Top

27 楼bjay(ben)回复于 2002-04-02 10:30:33 得分 2

我这里给一个总结(有不对之处请回贴)。  
   
  符合题目要求的排列方法见我上面的回贴。  
  tiantian_2001(田田)给出了组合数:96并给出了一个程序  
  colacoca(我是一瓶倒过来的可口可乐)   给出了一个简单的程序  
  (程序是否正确我没看:-))。  
   
  下面我给出关于96的证明:  
  全满的一列:4  
  全满的一行:4  
  3个在3*3的矩阵中有:3*2  
  综上所述:共有4*4*3*2=96种排法。  
   
  最后:楼主该结贴了。  
   
  Top

28 楼tiantian_2001(田田)回复于 2002-04-02 14:18:20 得分 0

呵呵:)Top

29 楼huahao0672(熾天使)回复于 2002-04-02 21:43:36 得分 10

1100[1]  
  1010  
  1001  
  1111  
  *****************  
  1100[2]  
  1010  
  1111  
  1001  
  *****************  
  1100[3]  
  1001  
  1010  
  1111  
  *****************  
  1100[4]  
  1001  
  1111  
  1010  
  *****************  
  1100[5]  
  0110  
  0101  
  1111  
  *****************  
  1100[6]  
  0110  
  1111  
  0101  
  *****************  
  1100[7]  
  0101  
  0110  
  1111  
  *****************  
  1100[8]  
  0101  
  1111  
  0110  
  *****************  
  1100[9]  
  1111  
  1010  
  1001  
  *****************  
  1100[10]  
  1111  
  1001  
  1010  
  *****************  
  1100[11]  
  1111  
  0110  
  0101  
  *****************  
  1100[12]  
  1111  
  0101  
  0110  
  *****************  
  1010[13]  
  1100  
  1001  
  1111  
  *****************  
  1010[14]  
  1100  
  1111  
  1001  
  *****************  
  1010[15]  
  1001  
  1100  
  1111  
  *****************  
  1010[16]  
  1001  
  1111  
  1100  
  *****************  
  1010[17]  
  0110  
  0011  
  1111  
  *****************  
  1010[18]  
  0110  
  1111  
  0011  
  *****************  
  1010[19]  
  0011  
  0110  
  1111  
  *****************  
  1010[20]  
  0011  
  1111  
  0110  
  *****************  
  1010[21]  
  1111  
  1100  
  1001  
  *****************  
  1010[22]  
  1111  
  1001  
  1100  
  *****************  
  1010[23]  
  1111  
  0110  
  0011  
  *****************  
  1010[24]  
  1111  
  0011  
  0110  
  *****************  
  1001[25]  
  1100  
  1010  
  1111  
  *****************  
  1001[26]  
  1100  
  1111  
  1010  
  *****************  
  1001[27]  
  1010  
  1100  
  1111  
  *****************  
  1001[28]  
  1010  
  1111  
  1100  
  *****************  
  1001[29]  
  0101  
  0011  
  1111  
  *****************  
  1001[30]  
  0101  
  1111  
  0011  
  *****************  
  1001[31]  
  0011  
  0101  
  1111  
  *****************  
  1001[32]  
  0011  
  1111  
  0101  
  *****************  
  1001[33]  
  1111  
  1100  
  1010  
  *****************  
  1001[34]  
  1111  
  1010  
  1100  
  *****************  
  1001[35]  
  1111  
  0101  
  0011  
  *****************  
  1001[36]  
  1111  
  0011  
  0101  
  *****************  
  0110[37]  
  1100  
  0101  
  1111  
  *****************  
  0110[38]  
  1100  
  1111  
  0101  
  *****************  
  0110[39]  
  1010  
  0011  
  1111  
  *****************  
  0110[40]  
  1010  
  1111  
  0011  
  *****************  
  0110[41]  
  0101  
  1100  
  1111  
  *****************  
  0110[42]  
  0101  
  1111  
  1100  
  *****************  
  0110[43]  
  0011  
  1010  
  1111  
  *****************  
  0110[44]  
  0011  
  1111  
  1010  
  *****************  
  0110[45]  
  1111  
  1100  
  0101  
  *****************  
  0110[46]  
  1111  
  1010  
  0011  
  *****************  
  0110[47]  
  1111  
  0101  
  1100  
  *****************  
  0110[48]  
  1111  
  0011  
  1010  
  *****************  
  0101[49]  
  1100  
  0110  
  1111  
  *****************  
  0101[50]  
  1100  
  1111  
  0110  
  *****************  
  0101[51]  
  1001  
  0011  
  1111  
  *****************  
  0101[52]  
  1001  
  1111  
  0011  
  *****************  
  0101[53]  
  0110  
  1100  
  1111  
  *****************  
  0101[54]  
  0110  
  1111  
  1100  
  *****************  
  0101[55]  
  0011  
  1001  
  1111  
  *****************  
  0101[56]  
  0011  
  1111  
  1001  
  *****************  
  0101[57]  
  1111  
  1100  
  0110  
  *****************  
  0101[58]  
  1111  
  1001  
  0011  
  *****************  
  0101[59]  
  1111  
  0110  
  1100  
  *****************  
  0101[60]  
  1111  
  0011  
  1001  
  *****************  
  0011[61]  
  1010  
  0110  
  1111  
  *****************  
  0011[62]  
  1010  
  1111  
  0110  
  *****************  
  0011[63]  
  1001  
  0101  
  1111  
  *****************  
  0011[64]  
  1001  
  1111  
  0101  
  *****************  
  0011[65]  
  0110  
  1010  
  1111  
  *****************  
  0011[66]  
  0110  
  1111  
  1010  
  *****************  
  0011[67]  
  0101  
  1001  
  1111  
  *****************  
  0011[68]  
  0101  
  1111  
  1001  
  *****************  
  0011[69]  
  1111  
  1010  
  0110  
  *****************  
  0011[70]  
  1111  
  1001  
  0101  
  *****************  
  0011[71]  
  1111  
  0110  
  1010  
  *****************  
  0011[72]  
  1111  
  0101  
  1001  
  *****************  
  1111[73]  
  1100  
  1010  
  1001  
  *****************  
  1111[74]  
  1100  
  1001  
  1010  
  *****************  
  1111[75]  
  1100  
  0110  
  0101  
  *****************  
  1111[76]  
  1100  
  0101  
  0110  
  *****************  
  1111[77]  
  1010  
  1100  
  1001  
  *****************  
  1111[78]  
  1010  
  1001  
  1100  
  *****************  
  1111[79]  
  1010  
  0110  
  0011  
  *****************  
  1111[80]  
  1010  
  0011  
  0110  
  *****************  
  1111[81]  
  1001  
  1100  
  1010  
  *****************  
  1111[82]  
  1001  
  1010  
  1100  
  *****************  
  1111[83]  
  1001  
  0101  
  0011  
  *****************  
  1111[84]  
  1001  
  0011  
  0101  
  *****************  
  1111[85]  
  0110  
  1100  
  0101  
  *****************  
  1111[86]  
  0110  
  1010  
  0011  
  *****************  
  1111[87]  
  0110  
  0101  
  1100  
  *****************  
  1111[88]  
  0110  
  0011  
  1010  
  *****************  
  1111[89]  
  0101  
  1100  
  0110  
  *****************  
  1111[90]  
  0101  
  1001  
  0011  
  *****************  
  1111[91]  
  0101  
  0110  
  1100  
  *****************  
  1111[92]  
  0101  
  0011  
  1001  
  *****************  
  1111[93]  
  0011  
  1010  
  0110  
  *****************  
  1111[94]  
  0011  
  1001  
  0101  
  *****************  
  1111[95]  
  0011  
  0011  
  1001  
  *****************  
  1111[96]  
  0011  
  1010  
  0110  
  *****************  
  1111[97]  
  0011  
  1001  
  0101  
  *****************  
  1111[98]  
  0011  
  0110  
  1010  
  *****************  
  1111[99]  
  0011  
  0101  
  1001  
  *****************  
   
   
   
   
   
  #include   <stdio.h>  
  #define   TURE   1  
  #define   FLASE   0  
  int   a[4][4];  
  int   b[7][4]={1,1,0,0,  
            1,0,1,0,  
            1,0,0,1,  
            0,1,1,0,  
            0,1,0,1,  
            0,0,1,1,  
            1,1,1,1};  
   
  /*judge(int   a[][])*/  
  /*copy(int   com,int   col,int   b[][]);*/  
   
  main()  
  {int   i,j,m,n,x,y,col_num,s;  
    col_num0;s=FLASE;  
    for(x=0;x<4;x++)  
          for(y=0;y<4;y++)  
  a[x][y]=0;  
    for(i=0;i<7;i++)  
    {   copy(i,0);  
        for(j=0;j<7;j++)  
        {   copy(j,1);  
            for(m=0;m<7;m++)  
            {   copy(m,2);  
                for(n=0;n<7;n++)  
                {   copy(n,3);  
    s=judge();  
    if(s==TURE)  
    {   for(x=0;x<4;x++)  
        {     for(y=0;y<4;y++)  
  printf("%d",a[x][y]);  
              printf("\n");  
              col_num++;  
              if(col_num==25)  
              {printf("press   any   key   to   continue!");  
                col_num=0;  
                getch();  
              }  
        }  
        printf("*****************\n");  
    }  
                }  
            }  
        }  
    }  
  }  
   
  int   judge()  
  {int   num,x,y,sum;  
    num=sum=0;  
    for(x=0;x<4;x++)  
        for(y=0;y<4;y++)  
              num+=a[x][y];  
    if(num!=10)   return   FLASE;  
    for(x=0;x<4;x++)  
    {   for(y=0;y<4;y++)  
              sum+=a[y][x];  
        if(sum%2!=0)   return   FLASE;  
    }  
    return   TURE;  
  }  
  copy(int   com,int   col)  
  {  
    int   x;  
    for(x=0;x<4;x++)  
          a[col][x]=b[com][x];  
  }  
   
  我认为应有99种,96种一定是少了。  
  在我的程序当中不可棱有重副。  
   
  Top

30 楼romberg2002()回复于 2002-04-02 22:26:57 得分 0

楼上的,你的程序在我的机器上运行,第一个结果就是错的。是我的机器不行(15000¥)?Top

31 楼tiantian_2001(田田)回复于 2002-04-03 09:19:56 得分 0

第95个就错了Top

32 楼bjay(ben)回复于 2002-04-03 09:41:05 得分 0

94与97重复了。Top

33 楼tiantian_2001(田田)回复于 2002-04-03 10:26:24 得分 0

var  
      Form1:   TForm1;  
      a:array[0..3]   of   array[0..3]   of   integer;  
      b:array[0..6]   of   array[0..3]   of   integer=((1,1,0,0),  
                                                                                        (1,0,1,0),  
                                                                                        (1,0,0,1),  
                                                                                        (0,1,1,0),  
                                                                                        (0,1,0,1),  
                                                                                        (0,0,1,1),  
                                                                                        (1,1,1,1));  
  implementation  
   
  {$R   *.DFM}  
   
  procedure   TForm1.Button1Click(Sender:   TObject);  
  var   i,j,m,n,x,y,col_num:integer;  
          s:boolean;  
          count:integer;  
  begin  
        count:=0;  
  ///*judge(int   a[][])*/  
  ///*copyvalue(int   com,int   col,int   b[][]);*/  
      col_num:=0;  
      for   i:=0   to   6   do  
      begin  
          copyvalue(i,0);  
          for   j:=0   to   6   do  
          begin  
              copyvalue(j,1);  
              for   m:=0   to   6   do  
              begin  
                  copyvalue(m,2);  
                  for   n:=0   to   6   do  
                  begin  
                      copyvalue(n,3);  
                      s:=judge;  
                      if   s   then  
                      begin  
                          inc(count);  
                          for   x:=0   to   3   do  
                          richedit1.lines.add(inttostr(a[x,0])+  
                                                                  inttostr(a[x,1])+  
                                                                  inttostr(a[x,2])+  
                                                                  inttostr(a[x,3]))   ;  
                          richedit1.lines.add('**********('+inttostr(count)+')');  
                      end;  
                  end;  
              end;  
          end;  
      end;  
  end;  
  //int   judge()  
  {int   num,x,y,sum;  
    num=sum=0;  
    for(x=0;x<4;x++)  
        for(y=0;y<4;y++)  
              num+=a[x][y];  
    if(num!=10)   return   FLASE;  
    for(x=0;x<4;x++)  
    {   for(y=0;y<4;y++)  
              sum+=a[y][x];  
        if(sum%2!=0)   return   FLASE;  
    }  
  //   return   TURE;  
  //}  
  //copy(int   com,int   col)  
  {  
    int   x;  
    for(x=0;x<4;x++)  
          a[col][x]=b[com][x];  
  }  
  procedure   TForm1.copyvalue(com:integer;col:integer);  
  var   x:integer;  
  begin  
      for   x:=0   to   3   do  
          a[col,x]:=b[com,x];  
  end;  
   
  function   TForm1.judge:boolean;  
  var   num,x,y,sum:integer;  
  begin  
      num:=0;sum:=0;  
      for   x:=0   to   3   do  
          for   y:=0   to   3   do  
              num:=num+a[x][y];  
   
      if(num<>10)   then  
      begin  
          result:=false;  
          exit;  
      end;  
   
      for   x:=0   to   3   do  
      begin  
          sum:=a[0,x]+a[1,x]+a[2,x]+a[3,x];  
   
          if(sum   mod   2<>0)   then  
          begin  
              result:=false;  
              exit;  
          end;  
   
      end;  
   
      result:=true;  
  end   ;Top

34 楼tiantian_2001(田田)回复于 2002-04-03 10:28:52 得分 0

huahao0672(华好0672)   ,你好,你的程序我改称delphi的了,执行后也是96个,怎么会出现99个呢?Top

35 楼huahao0672(熾天使)回复于 2002-04-03 11:53:27 得分 0

是我在拷的时候出错了,应该是96个。  
  我把我的程序做了一下改动,加了一个文件上去,并通过一个total变量  
  统计了一下有确是96个。  
  下面是我新改动过的程序。  
  希望大家,提出好的意见。Top

36 楼tiantian_2001(田田)回复于 2002-04-03 12:55:52 得分 0

huahao0672(华好0672)   ,你新改的程序在那呢,我怎么没看到呀Top

37 楼huahao0672(熾天使)回复于 2002-04-03 12:58:57 得分 0

1100[1]  
  1010  
  1001  
  1111  
  ************  
  1100[2]  
  1010  
  1111  
  1001  
  ************  
  1100[3]  
  1001  
  1010  
  1111  
  ************  
  1100[4]  
  1001  
  1111  
  1010  
  ************  
  1100[5]  
  0110  
  0101  
  1111  
  ************  
  1100[6]  
  0110  
  1111  
  0101  
  ************  
  1100[7]  
  0101  
  0110  
  1111  
  ************  
  1100[8]  
  0101  
  1111  
  0110  
  ************  
  1100[9]  
  1111  
  1010  
  1001  
  ************  
  1100[10]  
  1111  
  1001  
  1010  
  ************  
  1100[11]  
  1111  
  0110  
  0101  
  ************  
  1100[12]  
  1111  
  0101  
  0110  
  ************  
  1010[13]  
  1100  
  1001  
  1111  
  ************  
  1010[14]  
  1100  
  1111  
  1001  
  ************  
  1010[15]  
  1001  
  1100  
  1111  
  ************  
  1010[16]  
  1001  
  1111  
  1100  
  ************  
  1010[17]  
  0110  
  0011  
  1111  
  ************  
  1010[18]  
  0011  
  0110  
  1111  
  ************  
  1010[19]  
  0011  
  1111  
  0110  
  ************  
  1010[20]  
  1111  
  1100  
  1001  
  ************  
  1010[21]  
  1111  
  1001  
  1100  
  ************  
  1010[22]  
  1111  
  0110  
  0011  
  ************  
  1010[23]  
  1111  
  0011  
  0110  
  ************  
  1001[24]  
  1100  
  1010  
  1111  
  ************  
  1001[25]  
  1100  
  1111  
  1010  
  ************  
  1001[26]  
  1010  
  1100  
  1111  
  ************  
  1001[27]  
  1010  
  1111  
  1100  
  ************  
  1001[28]  
  0101  
  0011  
  1111  
  ************  
  1001[29]  
  0101  
  1111  
  0011  
  ************  
  1001[30]  
  0011  
  0101  
  1111  
  ************  
  1001[31]  
  0011  
  1111  
  0101  
  ************  
  1001[32]  
  1111  
  1100  
  1010  
  ************  
  1001[33]  
  1111  
  1010  
  1100  
  ************  
  1001[34]  
  1111  
  0101  
  0011  
  ************  
  1001[35]  
  1111  
  0011  
  0101  
  ************  
  0110[36]  
  1100  
  0101  
  1111  
  ************  
  0110[37]  
  1100  
  1111  
  0101  
  ************  
  0110[38]  
  1010  
  0011  
  1111  
  ************  
  0110[39]  
  1010  
  1111  
  0011  
  ************  
  0110[40]  
  0101  
  1100  
  1111  
  ************  
  0110[41]  
  0101  
  1111  
  1100  
  ************  
  0110[42]  
  0011  
  1010  
  1111  
  ************  
  0110[43]  
  0011  
  1111  
  1010  
  ************  
  0110[44]  
  1111  
  1100  
  0101  
  ************  
  0110[45]  
  1111  
  1010  
  0011  
  ************  
  0110[46]  
  1111  
  0101  
  1100  
  ************  
  0110[47]  
  1111  
  0011  
  1010  
  ************  
  0101[48]  
  1100  
  0110  
  1111  
  ************  
  0101[49]  
  1100  
  1111  
  0110  
  ************  
  0101[50]  
  1001  
  0011  
  1111  
  ************  
  0101[51]  
  1001  
  1111  
  0011  
  ************  
  0101[52]  
  0110  
  1100  
  1111  
  ************  
  0101[53]  
  0110  
  1111  
  1100  
  ************  
  0101[54]  
  0011  
  1001  
  1111  
  ************  
  0101[55]  
  0011  
  1111  
  1001  
  ************  
  0101[56]  
  1111  
  1100  
  0110  
  ************  
  0101[57]  
  1111  
  1001  
  0011  
  ************  
  0101[58]  
  1111  
  0110  
  1100  
  ************  
  0101[59]  
  1111  
  0011  
  1001  
  ************  
  0011[60]  
  1010  
  0110  
  1111  
  ************  
  0011[61]  
  1010  
  1111  
  0110  
  ************  
  0011[62]  
  1001  
  0101  
  1111  
  ************  
  0011[63]  
  1001  
  1111  
  0101  
  ************  
  0011[64]  
  0110  
  1010  
  1111  
  ************  
  0011[65]  
  0110  
  1111  
  1010  
  ************  
  0011[66]  
  0101  
  1001  
  1111  
  ************  
  0011[67]  
  0101  
  1111  
  1001  
  ************  
  0011[68]  
  1111  
  1010  
  0110  
  ************  
  0011[69]  
  1111  
  1001  
  0101  
  ************  
  0011[70]  
  1111  
  0110  
  1010  
  ************  
  0011[71]  
  1111  
  0101  
  1001  
  ************  
  1111[72]  
  1100  
  1010  
  1001  
  ************  
  1111[73]  
  1100  
  1001  
  1010  
  ************  
  1111[74]  
  1100  
  0110  
  0101  
  ************  
  1111[75]  
  1100  
  0101  
  0110  
  ************  
  1111[76]  
  1010  
  1100  
  1001  
  ************  
  1111[77]  
  1010  
  1001  
  1100  
  ************  
  1111[78]  
  1010  
  0110  
  0011  
  ************  
  1111[79]  
  1010  
  0011  
  0110  
  ************  
  1111[80]  
  1001  
  1100  
  1010  
  ************  
  1111[81]  
  1001  
  1010  
  1100  
  ************  
  1111[82]  
  1001  
  0101  
  0011  
  ************  
  1111[83]  
  1001  
  0011  
  0101  
  ************  
  1111[84]  
  0110  
  1100  
  0101  
  ************  
  1111[85]  
  0110  
  1010  
  0011  
  ************  
  1111[86]  
  0110  
  0101  
  1100  
  ************  
  1111[87]  
  0110  
  0011  
  1010  
  ************  
  1111[88]  
  0101  
  1100  
  0110  
  ************  
  1111[89]  
  0101  
  1001  
  0011  
  ************  
  1111[90]  
  0101  
  0110  
  1100  
  ************  
  1111[91]  
  0101  
  0011  
  1001  
  ************  
  1111[92]  
  0011  
  1010  
  0110  
  ************  
  1111[93]  
  0011  
  1001  
  0101  
  ************  
  1111[94]  
  0011  
  0110  
  1010  
  ************  
  1111[95]  
  0011  
  0101  
  1001  
  ************  
  1010[96]  
  0110  
  1111  
  0011  
   
   
   
  #include   <stdio.h>  
  #define   TURE   1  
  #define   FLASE   0  
  int   a[4][4];  
  int   b[7][4]={1,1,0,0,  
            1,0,1,0,  
            1,0,0,1,  
            0,1,1,0,  
            0,1,0,1,  
            0,0,1,1,  
            1,1,1,1};  
   
  main()  
  {int   i,j,m,n,x,y,col_num,s,total,q;FILE   *fp;char   temp;  
    col_num=0;s=FLASE;total=0;  
  if((fp=fopen("colfile.txt","w"))==NULL)  
    {printf("the   file   can   not   be   opened!\n");  
      exit(1);  
    }  
    for(x=0;x<4;x++)  
          for(y=0;y<4;y++)  
  a[x][y]=0;  
    for(i=0;i<7;i++)  
    {   copy(i,0);  
        for(j=0;j<7;j++)  
        {   copy(j,1);  
            for(m=0;m<7;m++)  
            {   copy(m,2);  
                for(n=0;n<7;n++)  
                {   copy(n,3);  
    s=judge();  
    if(s==TURE)  
    {   total++;  
        for(x=0;x<4;x++)  
        {     for(y=0;y<4;y++)  
  {printf("%d",a[x][y]);  
    if(a[x][y]==1)   temp='1';  
    else   temp='0';  
    fputc(temp,fp);  
  }  
              printf("\n");fputc('\n',fp);  
              col_num++;  
              if(col_num==18)  
              {printf("press   any   key   to   continue!\n");  
                col_num=0;  
                getch();  
              }  
        }  
        printf("*****************\n");  
        for(q=0;q<12;q++)  
              fputc('*',fp);  
        fputc('\n',fp);  
    }  
                }  
            }  
        }  
    }  
    fclose(fp);  
    printf("totoal   number   is:%d\n",total);  
  }  
   
  int   judge()  
  {int   num,x,y,sum;  
    num=sum=0;  
    for(x=0;x<4;x++)  
        for(y=0;y<4;y++)  
              num+=a[x][y];  
    if(num!=10)   return   FLASE;  
    for(x=0;x<4;x++)  
    {   for(y=0;y<4;y++)  
              sum+=a[y][x];  
        if(sum%2!=0)   return   FLASE;  
    }  
    return   TURE;  
  }  
  copy(int   com,int   col)  
  {  
    int   x;  
    for(x=0;x<4;x++)  
          a[col][x]=b[com][x];  
  }  
   
   
  我的编程思想是在每一行组合出所有的情况,最后不可能有重复的情况。  
  所以就应该是96种。  
  这个问题现在彻底解决。  
  Top

38 楼tiantian_2001(田田)回复于 2002-04-03 13:20:30 得分 0

huahao0672(华好0672)   ,你写的程序不错Top

39 楼colacoca(我是一瓶倒过来的可口可乐)回复于 2002-04-03 16:56:55 得分 0

搂主,可以结贴了Top

40 楼huahao0672(熾天使)回复于 2002-04-03 17:31:10 得分 0

不知道我能得多少分?Top

41 楼mrunix(深水蔚蓝...)回复于 2002-04-03 21:21:12 得分 0

4X4的棋盘是左右对称,上下对称,中心对称的图形。我想很多是重复的!!!!!Top

42 楼bjay(ben)回复于 2002-04-04 09:24:33 得分 0

如果考虑对称的话,就用一下poly定理了。  
  我只知道要用它,一年前学的东东全还给老师了(当时也没全明白)。Top

43 楼tiantian_2001(田田)回复于 2002-04-04 09:36:18 得分 0

要说对称就有意思了,如果把一个图行转90、180、270、360、或翻过来那当然是重复的很多了!Top

44 楼huahao0672(熾天使)回复于 2002-04-04 11:59:13 得分 0

 
  请好好看一下我的程序,我是用每一行的所有的情况排列出所有的组合。  
  对于某一行确定的情况都一一进行的讨论。具体的说,每一行有且只有  
  七种情况。把这七种情况一一组合,可能会出现相同的情况吗?如果你要  
  说拓朴关系有多少种。那一定没有96种。Top

45 楼robin_xin_xin(鳄鱼宝宝)回复于 2002-04-04 23:51:18 得分 6

#define   N   4  
  #define   M   6  
  int   c[M];  
  void   print()  
  {  
      int   i,j,k=0;  
        for(i=0;i<N;i++)  
          {  
              for(j=0;j<N;j++)  
                  if(i*N+j==c[k])  
                      {printf("*");  
                          k++;  
                      }  
                    else  
                      printf("O");    
                  printf("\n");  
          }                                            
  }          
  main()  
  {  
  int   i,j,k,ro[N],col[M];  
  for(i=0;i<N;i++)  
  ro[i]=col[i]=0;  
  k=N*N;  
  i=0;  
  col[i]=0;  
  while(col[0]>k-M)  
  {  
      if(i<M-1)  
        {     c[i+1]=c[i]+1;  
                i++;  
        }  
      else  
        {    
            for(j=0;j<M;j++)  
              {  
                  ro[c[j]%N]++;  
                  col[(int)(c[j]/N)]++;  
                }  
            for(j=0;j<N;j++)  
              if((col[j]%2!=0)||(ro[j]%2!=0))  
                break;  
              if(j==N)   prinf();  
            for(j=0;j<N;j++)  
              ro[j]=col[j]=o;  
            while(c[i]>k-i+M)  
                    i--;  
                c[i]++;  
        }  
      }  
  }          
   
   
   
   
   
  Top

46 楼huahao0672(熾天使)回复于 2002-04-05 17:49:03 得分 0

robin_xin_xin(鳄鱼宝宝)    
  你能不能说明一下你的编程思路。  
  用有是什么方法,把所有的排列一  
  一列举出来的。Top

47 楼robin_xin_xin(鳄鱼宝宝)回复于 2002-04-06 09:50:25 得分 0

SORRY,我的代码有点错误,现已改正了  
  我使用的是回漱法,C[]用来记录M个点的位置  
  位置用一维的坐标表示,既:i*N+j,其中i为行位置,j为列位置  
  在保证C[0]<C[1]<.....<C[M]的前提下进行搜索  
  ^^^^^^^^^^^^^^^^^^^^^^^^  
  我一共找到96种答案  
   
  #define   N   4  
  #define   M   6  
  int   c[M];  
  int   count=0;  
  void   print()  
  {  
      int   i,j,k=0;  
        for(i=0;i<N;i++)  
          {  
              for(j=0;j<N;j++)  
                  if(i*N+j==c[k])  
                      {printf("*");  
                          k++;  
                      }  
                    else  
                      printf("O");    
                  printf("\n");  
          }              
  count++;  
  printf("this   is   %dth   answer\n");                                
  }          
  main()  
  {  
  int   i,j,k,ro[N],col[M];  
  for(i=0;i<N;i++)  
  ro[i]=col[i]=0;  
  k=N*N;  
  i=0;  
  col[i]=0;  
  while(i>=0)  
  {  
      if(i<M-1)  
        {     c[i+1]=c[i]+1;  
                i++;  
        }  
      else  
        {    
            for(j=0;j<M;j++)  
              {  
                  ro[c[j]%N]++;  
                  col[(int)(c[j]/N)]++;  
                }  
            for(j=0;j<N;j++)  
              if((col[j]%2!=0)||(ro[j]%2!=0))  
                break;  
              if(j==N)   print();  
            for(j=0;j<N;j++)  
              ro[j]=col[j]=0;  
            while(c[i]>=k+i-M)  
                    i--;  
                c[i]++;  
        }  
      }  
  }          
   
   
   
   
   
  Top

48 楼LeeMaRS(小菜虎,仍需努力)回复于 2002-04-06 19:29:05 得分 0

to   colacoca(我是一瓶倒过来的可口可乐):  
  听了你的话,我又重新运行了一次我的程序.答案也是96种.  
  没问题的.  
  Top

49 楼zhengxionghua()回复于 2002-04-06 22:40:23 得分 0

已知——整数10;四阶行列式;  
  要求——4行相加得10且每个元素都是偶数;4列相加得10且每个元素都是偶数;  
  想法——把10分成4个偶数;10=4+2+2+2;(这样分,只有这种分法,可参照前面的例子)  
  举例——可以任意的颠倒两行(或两列)的顺序,这样在利用排列组合4*4*3*2=96   种(每一行都放4个棋子的可能;每一列都有放4个棋子的可能;剩下3行选一行放1个;剩下两行选一行放1个)  
  00xx       2  
  0000       4  
  0x0x       2  
  0xx0       2  
  4222Top

50 楼tata624(中文字符)回复于 2002-04-07 18:30:38 得分 0

96种  
  就算旋转后相同也算两种不同摆法.  
  要不你就可以去推翻八皇后问题的解法了