Codeforces 510A Fox And Snake 狐狸與蛇

難易度 : 800

英文原文如下

Fox Ciel starts to learn programming. The first task is drawing a fox! However, that turns out to be too hard for a beginner, so she decides to draw a snake instead.

A snake is a pattern on a n by m table. Denote c-th cell of r-th row as (r, c). The tail of the snake is located at (1, 1), then it’s body extends to (1, m), then goes down 2 rows to (3, m), then goes left to (3, 1) and so on.

Your task is to draw this snake for Fox Ciel: the empty cells should be represented as dot characters (‘.’) and the snake cells should be filled with number signs (‘#’).

Consider sample tests in order to understand the snake pattern.

中文翻譯

狐狸 Ciel 開始學習寫程式,她的第一個任務是要來畫一隻狐狸! 不過,畫一隻狐狸對於一個初學者來說有點太難了,所以她決定畫一條蛇來代替。

一條蛇是在一個 n 行 m 列的表格上的一個圖案。將第 r 行第 c 列的格子表示為 (r, c)。蛇的尾巴位於 (1, 1),然後它的身體延伸到 (1, m),然後向下延伸 2 行到 (3, m),然後向左延伸到 (3, 1),依此類推。

你/妳的任務是幫她畫這條蛇: 空白的格子應該用點字元(‘.’)來表示,另外蛇的身體則是要用井字號(‘#’)來填滿。

參考下面的範例來了解蛇的樣式。

輸入

The only line contains two integers: n and m (3 ≤ n, m ≤ 50).

n is an odd number.

唯一一行輸入包含了兩個整數:  n 跟 m (3 ≤ n, m ≤ 50)。

n 是一個奇數

輸出

Output n lines. Each line should contain a string consisting of m characters. Do not output spaces.

印出 n 行,每一行必須包含一個包含了 m 個字元的字串。不要印出空白。

範例

輸入3 3
輸出###
. . #
###
輸入3 4
輸出####
. . . #
####
輸入5 3
輸出###
. . #
###
# . .
###
輸入9 9
輸出#########
. . . . . . . . #
#########
# . . . . . . . .
#########
. . . . . . . . #
#########
# . . . . . . . .
#########

解題思路

在這一題中,我們可以用餘數的判斷就能處理了 (使用 % 運算子)

要判斷的就是奇數就是整個身體

而偶數要分是 2 還是 4的倍數,兩個的身體位置是不一樣的

另外,為了方便進行計算,故 for 迴圈不是從0開始,而是改為從 1 開始 (結束條件自然也向後遞延了)

C# 解決方案

方案1

string[] first = Console.ReadLine().Split(' '); //split by space
int n = int.Parse(first[0]); 
int m = int.Parse(first[1]); 


for(int i=1; i<=n; i++){
    var tmp = "";
    if(i%2 >0){
        tmp = new string('#', m);
    }
    else{
        if(i%4==0){
            tmp = "#"+new string('.', m-1);
        }
        else{
             tmp = new string('.', m-1)+"#";
        }
    }
    Console.WriteLine(tmp);
}

Java 解決方案

方案1 (Java11+)

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        String[] first = scanner.nextLine().split(" "); // split by space
        int n = Integer.parseInt(first[0]);
        int m = Integer.parseInt(first[1]);
        
        for(int i=1; i<=n; i++){
            String tmp = "";
            if(i%2 >0){
                tmp = "#".repeat(m);
            }
            else{
                if(i%4==0){
                    tmp = "#"+".".repeat(m-1);
                }
                else{
                     tmp = ".".repeat(m-1)+"#";
                }
            }
             System.out.println(tmp);
        }
    }
}

Java 11 的時候,新增一個內建的語法 String裡的 repeat(),我們可以用這個語法簡單的處理這個問題。

方案2 ( Java11 以前)

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        String[] first = scanner.nextLine().split(" "); // split by space
        int n = Integer.parseInt(first[0]);
        int m = Integer.parseInt(first[1]);
        
        for(int i=1; i<=n; i++){
            String tmp = "";
            if(i%2 >0){
                tmp = getRepeatString('#',m);
            }
            else{
                if(i%4==0){
                    tmp = "#"+getRepeatString('.',m-1);
                }
                else{
                     tmp = getRepeatString('.',m-1)+"#";
                }
            }
             System.out.println(tmp);
        }
    }
    
    private static String getRepeatString(Character chr, int times){
        StringBuilder tmp = new StringBuilder();
        for (int i = 0; i < times; i++) {
            tmp.append(chr);
        }
        return tmp.toString();
    }
}

Java 11 以前,像是老舊系統常用的 Java8,就只能乖乖 for 迴圈來處理了~


結論

確實是畫蛇比較簡單,狐狸要怎麼畫啊…

話說以前大學上課都還只是畫星星呢,我都嫌簡單到浪費時間了~

🧡如果文章有幫上你的忙,那是我的榮幸

🧡收藏文章或幫我點個廣告,那都是對我的支持 (幫我多多分享也大感謝!!)

✅如有任何疑問,歡迎透過留言或messenger讓我知道 !

不免俗地推銷一下網站2023的數據,看有沒有合作夥伴 – 2023年度網站回顧 – Zyrastory-當程式碰上美食

題目連結 : Problem – 510A – Codeforces

一些其他的Codeforces文章

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *