10个棋子摆在四行四列,每行每列棋子数都是偶数
棋盘四行四列
用十个棋子摆在格子上。
使得每行和每列的棋子数都是偶数
这十个棋子怎么摆?
问题点数: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种
就算旋转后相同也算两种不同摆法.
要不你就可以去推翻八皇后问题的解法了

