程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> XTUOJ 1173 Five Tiger(模擬)

XTUOJ 1173 Five Tiger(模擬)

編輯:C++入門知識



Five Tiger

Accepted : 34 Submit : 107 Time Limit : 1000 MS Memory Limit : 65536 KB

題目描述

五虎棋是流傳在東北民間的一種游戲,GG小的時候,經常被表哥虐得很慘。
由於各個地區的規則可能不大相同,並且GG的回憶不一定很准,所以,如果規則和你平常玩的的有沖突,請以這裡為主。
棋盤是橫五條,縱五條直線,形成25個交叉點,雙方輪流把棋子放到交叉點上 (由於所需各自和棋子數目不多,才12+13,GG小的時候,用的是象棋的棋盤和棋子,真的用大棋盤很爽~~~)
當雙方把棋盤下滿之後(先手下了13個棋子,後手下了12個棋子),根據雙方擺成的陣型來算分。 (當然,算分之後,還有提掉對方相應個數的棋子,然後棋子一格一格的挪動,繼續形成陣型,提掉對方的棋子神碼的,GG表述不明白,也就不再後續問題上出題了)
現在GG想讓你幫忙算,雙方擺成的陣型,分別得分多少?

其中記分的陣型有(用o表示棋子落點)
大五虎(10分)
要求占據了四個角落和最中間的位置

o...o
.....
..o..
.....
o...o

五虎(5分):
擺成形如下圖的陣勢

o.o
.o.
o.o

通天(5分):
橫著/豎著/斜著 五個棋子連成一條直線,如

.....	..o..	o....
ooooo	..o..	.o...
.....	..o..	..o..
.....	..o..	...o.
.....	..o..	....o

四斜(4分):
嚴格定義,GG說不明白,總之只有以下四種

...o.	.....	.....	.o...
..o..	o....	....o	..o..
.o...	.o...	...o.	...o.
o....	..o..	..o..	....o
.....	...o.	.o...	.....

三斜(3分):
嚴格定義,GG說不明白,總之只有以下四種

..o..	.....	.....	..o..
.o...	.....	.....	...o.
o....	o....	....o	....o
.....	.o...	...o.	.....
.....	..o..	..o..	.....

小斗(1分):
四個棋子形成一個最小正方形

oo
oo

例1

o...o
.o.o.
..o..
.oooo
o..oo

o這名玩家形成了 1個大五虎(10分), 1個小五虎(5分), 2個通天(10分), 1個小斗(1分). 總分:10 + 5 + 10*2 + 1 = 36

例2

.o.o.
o.o.o
.o.o.
o.o.o
.o.o.

o這名玩家形成了 4個小五虎, 4個四斜 總分 5*4 + 4*4 = 36

輸入

多組測試數據。首先是一個整數T ( 1 ≤ T ≤ 10000 ),占一行,表示測試數據的組數.
對於每組測試數據,占6行。 首先是一個空行 接下來的五行,表示一個局勢。 也就是說,每行5個字符(x表示先手, o表示後手,也就是說,會有13個x和12個o)

輸出

對於每組測試數據,輸出一行. 結果為兩個整數,之間用一個空格隔開,分別表示先手(x)的得分,和後手(o)的得分。

樣例輸入

2

oxxxo
xoxox
xxoxx
xoooo
oxxoo

xoxox
oxoxo
xoxox
oxoxo
xoxox

樣例輸出

9 26
57 36


Source

XTU OnlineJudge


今天ac的第二個題,也是模擬的題,思路不是很復雜,按照題意來,把函數一個個寫出來就行了,主要是輸入輸出的時候有點坑爹啊(字符串的輸入啊!!細節還是處理的不好)在寢室自己用c語言寫的時候輸入就出現問題了!!按照思路寫還是一下子就寫出來了,今天也就是這個題目搞了好久,還好最終還是ac啦。

下面是ac的代碼:

#include 
#include 
using namespace std;
char Matrix[5][5];
using namespace std;
int big_tiger(char ch)//大五虎的情況 10分
{
    if(Matrix[0][0]==ch && Matrix[0][4]==ch && Matrix[2][2]==ch && Matrix[4][0]==ch && Matrix[4][4]==ch)
        return 10;
    else
        return 0;
}
int small_tiger(char ch)//小五虎的情況 5分
{
    int total = 0;
    int i=1,j=1;
    for(i=1; i<4; i++)
        for(j=1; j<4; j++)
        {
            if(Matrix[i][j]==ch && Matrix[i-1][j-1]==ch && Matrix[i+1][j+1]==ch && Matrix[i-1][j+1]==ch && Matrix[i+1][j-1]==ch)
               total += 5;
        }
    return total;
}
int sky(char ch)//通天的情況 5分
{
    int total = 0;
    int i;
    for(i=0; i<5; i++)
    {
        if(Matrix[i][0]==ch && Matrix[i][1]==ch && Matrix[i][2]==ch && Matrix[i][3]==ch && Matrix[i][4]==ch)
            total += 5;
        if(Matrix[0][i]==ch && Matrix[1][i]==ch && Matrix[2][i]==ch && Matrix[3][i]==ch && Matrix[4][i]==ch)
           total += 5;
    }
    if(Matrix[0][0]==ch && Matrix[1][1]==ch && Matrix[2][2]==ch && Matrix[3][3]==ch && Matrix[4][4]==ch)
      total+=5;
    if(Matrix[0][4]==ch && Matrix[1][3]==ch && Matrix[2][2]==ch && Matrix[3][1]==ch && Matrix[4][0]==ch)
      total+=5;
    return total;
}
int four(char ch)//四斜的情況 4分
{
    int total=0;
    if(Matrix[0][3]==ch && Matrix[1][2]==ch && Matrix[2][1]==ch && Matrix[3][0]==ch)
        total += 4;
    if(Matrix[1][0]==ch && Matrix[2][1]==ch && Matrix[3][2]==ch && Matrix[4][3]==ch)
        total += 4;
    if(Matrix[1][4]==ch && Matrix[2][3]==ch && Matrix[3][2]==ch && Matrix[4][1]==ch)
        total += 4;
    if(Matrix[0][1]==ch && Matrix[1][2]==ch && Matrix[2][3]==ch && Matrix[3][4]==ch)
        total += 4;

        return total;
}
int three(char ch)// 三斜的情況 3分
{
    int total=0;
    if(Matrix[0][2]==ch && Matrix[1][1]==ch && Matrix[2][0]==ch)
        total += 3;
    if(Matrix[2][0]==ch && Matrix[3][1]==ch && Matrix[4][2]==ch)
        total += 3;
    if(Matrix[2][4]==ch && Matrix[3][3]==ch && Matrix[4][2]==ch)
        total += 3;
    if(Matrix[0][2]==ch && Matrix[1][3]==ch && Matrix[2][4]==ch)
        total += 3;

    return total;
}
int small_dou(char ch)// 小斗的情況 1分
{
    int total = 0;
    int i,j;
    for(i=0; i<4; i++)
        for(j=0; j<4; j++)
            if(Matrix[i][j]==ch && Matrix[i+1][j]==ch && Matrix[i][j+1]==ch && Matrix[i+1][j+1]==ch)
            {
                total++;
            }

    return total;

}
int main()
{
    int t,frist,last ,i,j;
    scanf("%d",&t);
    getchar();//吸收我們輸入時輸進去的空格;
    //cin>>t;//這裡我先前就用輸入流和c語言的輸入進行對比,這裡用cin就方便多了,就不用在考慮這種情況了,這裡要吸收教訓!!
    while(t--)
    {
        getchar();//題目要求要空一行
        for(i=0;i<5;i++)
            {
               for(j=0;j<5;j++)
               scanf("%c",&Matrix[i][j]);
               getchar();//吸收我們的換行符
               //cin>>Matrix[i][j];
            }
         frist=last=0;
         frist=big_tiger('x')+small_tiger('x')+sky('x')+four('x')+three('x')+small_dou('x');
         last=big_tiger('o')+small_tiger('o')+sky('o')+four('o')+three('o')+small_dou('o');
         printf("%d %d\n",frist,last);
    }
    return 0;
}
只ac了幾個簡單題,看網上的大神說自己的經歷的時候,都差不多都做了7.8百道題,任重而道遠啊!!!



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved