⑴ 在國際象棋的棋盤上(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號棋子向前連跨,具有很強的機動性,又比右側直線更巧妙,被稱為「豎長城」。