⑴ 在国际象棋的棋盘上(8*8),皇后可以走直线也可以走斜线(对角线).一个皇后能吃去同行和同对角线上
代码如下:
#include<iostream>
#include<cstdio>
#defineUINTunsignedint
#defineULLunsignedlonglong
#defineMAXN110;
usingnamespacestd;
intN,ans,minstep;
UINTRow,Col;
UINTLft,Rgt;
inlineUINTlowbit(UINTx){
returnx&(-x);
}
boolcheck(){
UINTtR=~Row,tC;
UINTcurR,curC;
while(tR){
curR=lowbit(tR);
tR^=curR;
tC=~Col;
while(tC){
curC=lowbit(tC);
tC^=curC;
if((Rgt&(curR*curC))!=0||(Lft&((1<<(N-1))/curR*curC))!=0)
continue;
returnfalse;
}
}
returntrue;
}
voiddfs(introw,intused,UINTcol,UINTdig,UINTadg){
if(used>minstep)
return;
if(row==N){
if(check()){
if(used<minstep){
minstep=used;
ans=0;
}
ans++;
}
return;
}
UINTstatus=~(col|dig|adg);
UINTbinRow=(1<<row);
while(status){
UINTt=status&(-status);
Col^=t;
Row^=binRow;
Lft^=((1<<(N-1))/binRow*t);
Rgt^=(binRow*t);
dfs(row+1,used+1,(t|col),(t|dig)>>1,(t|adg)<<1);
Col^=t;
Row^=binRow;
Lft^=((1<<(N-1))/binRow*t);
Rgt^=(binRow*t);
status^=t;
}
dfs(row+1,used,col,dig>>1,adg<<1);
}
intmain(){
while(cin>>N){
UINTcol=(1<<N)-1;
col=~col;
ans=0;
minstep=N+1;
Row=Col=col;
Rgt=Lft=0;
dfs(0,0,col,0,0);
cout<<minstep<<endl<<ans<<endl;
}
return0;
}
⑵ 一道小学数学题有十颗棋子,要放在十条直线上,要求每条直线上有三个棋子
有解,先画一个正方形的9个点如图所示,把所有3个点连起来,共8条,第十个专点,点在4,8连线和2,9连线的交属点处.
1 2 3
4 5 6
7 8 9
⑶ 以下象棋的棋子中不能走直线的是
象棋里面一边是16颗棋子,车马象士帅炮卒。其中马走日,象飞田,士斜着走,其他的都可以走直线。
⑷ 棋盘上有有黑白棋子,一条直线上只有3颗棋子,并颜色相同,叫三棋共线,有( )组 黑是黑子 白是白子
应该有三组,分别为:
最右一竖列
左上角的格子向右下方向的那条线
第二行第一列的格子向右下方向的那条线
不知道你找到的还有哪条线
⑸ 象棋棋子中不能走直线的是什么
象棋中不能走直线的棋子有马、象、士。能走直线的棋子有炮、兵、车、将。希望这道题可以帮大家。
⑹ 九颗棋子等距离摆在三条直线上,每条直线都有四颗棋子,能摆出什么图案
九颗棋子等距离摆在三条直线上,每条直线都有四颗棋子,可以摆成一个等边三角形,每条边上等距离摆四颗棋子,这样每边都有四个了。
⑺ 如图,用9颗棋子摆出8条直线,每条直线上只有三颗棋子。你能移动其中的2颗,使它们变成10条直线,每
将中间行的边上向里面移动半个单位。
我画图给你
这样的连接
⑻ 直线最专.业的棋 牌有什么入门书籍推荐吗
赏雪看花的心情,
有一个能满足你这要求的着站,这个着站信仪特别好
⑼ 竖棋和跳棋有什么区别
数棋和跳棋很像。
国际数棋的认识 国际数棋由六角形棋盘和带有两对0—9数字的十枚棋子组成,棋盘内按照规律编有0—9十个数字,行棋前棋手要将各自的十枚同色棋子对号入座放入自己的阵地内。
国际数棋简介
(二)国际数棋的行棋规则 :
第1个规则叫"移",任意一枚棋子可以向与它相邻的空位平移一步 ;
第2个规则叫"邻",任意一枚棋子可以跳过与它相邻的一枚棋子 ;
第3个规则叫做"单跨",一枚棋子可以跨过与它在同一直线上的几枚棋子,但必须是所要跨过的这几枚棋子的编号数通过数学运算算出行跳棋子的编号数来;
第3个规则要注意的地方: (1)落点只能落在前方相邻的直线空位上 ;2)每个棋子全部参与运算,只能运算一次;; (3)棋子中间空位多少不限 ;
第4个规则叫做"连跨"任意一枚棋子可以一次性连续跨过能够计算出相同得数的几段棋子。
(三)得分计算 当一方的十枚棋子先行全部占领对方的十个阵营空位,该方就有权"叫停",叫停后双方计算得分,并比较大小. 计算方法有两种:
(1) 差和法:棋子号数减去所占棋位编号数(或相反),再将所有棋子得分相加;
(2)积和法:棋子号数乘以所占棋位号数,再将所有棋子得分相加。
数棋的开局方法
(一)抢占左锋法:
这种方法主要是快速抢占我方阵营左侧角内与对角阵营在同一直线上的相对应的三个相邻空位,这样只要对角阵营一旦留有空位,我方占据该位置的棋子就可不断打入对方阵营,争取占领主动局面。
(二)左侧直线进攻法:
这种方法是抢先占领我方阵营左侧直线上的三个相邻空位,若对方角内有空位出现便可及时占领对方阵营空位。
(三)中锋进攻法:
主要是用1、0、4、8、9五枚棋子通过中路直入对方阵营。
(四)右侧直线进攻法:
这种方法是运用1、0、8号三棋子占领我方阵营右侧直线上相邻的三个空位,然后当对方阵营一旦有空位,我方棋子可快速借助这几枚占领对方的阵营空位。
(五)抢占右锋法:
这种方法即快速占领我方阵营右侧的角内的同一直线上位相邻的三个空位。
(六)14法:
这种方法先用1号棋子向右连移几步,走到中点前一步位置,在把4、3号棋子向前连跨,具有很强的机动性,又比右侧直线更巧妙,被称为“竖长城”。