close
內容

Taso 有一塊條狀的田地。他計劃在下一季種植不同的作物。但是這個地區有很多烏鴉,Taso 怕他們會吃掉這些作物。因此他決定在田地的不同位置放置稻草人。

田地可以用 1 x N 的格子模擬。有些部分是不毛之地無法種植作物。一個稻草人除了所在的格子外也保護其左側及右側緊鄰的格子。

已知田地的描述,要保護所有可用田地最少需要幾個稻草人?

輸入說明

輸入開始有一整數 T (≤ 100),表示測資筆數。

每筆測資第一行有一整數 N (0 < N < 100)。下一行有 N 個字元以描述田地。點 (.) 表示良田,井號 (#) 表示不毛之地。

輸出說明
對於每筆測資,先輸出測資編號,再輸出需放置的稻草人數量。
範例輸入 #1
3
3
.#.
11
...##....##
2
##
範例輸出 #1
Case 1: 1
Case 2: 3
Case 3: 0

C++

#include<iostream>
using namespace std;
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	int t;
	int n;
	string s;
	int ans;
	cin>>t; //輸入次數 
	for(int i=1;i<t+1;i++){
		cin>>n;
		getline(cin,s);
		int arr[n]={0}; //測資二 "00000000000" 
		/*測試用
		for(int k=0;k<n;k++){
			cout<<arr[k]<<" ";
		}*/
		
		getline(cin,s);
		ans=0;
		
		for(int j=0;j<n;j++){   //測資二 "...##....##" ->"11100111100" 
			if(s[j]=='.')arr[j]=1;
			else arr[j]=0;
		}
		/*測試用 
		for(int l=0;l<n;l++){
			cout<<arr[l]<<" ";
		}*/
		for(int j=0;j<n;j++){ // 測資二 "1(檢查到)(變0) 1(變0) 1(變0) 0 0 1 1 1 1 0 0" 
			if(arr[j]==1){
				ans++;
				arr[j]=0;
				arr[j+1]=0;
				arr[j+2]=0;
			}
		}
		cout<<"Case "<<i<<": "<<ans<<"\n";
	} 
    return 0;
}

python:

t=int(input())
for i in range(t):
    n=int(input())
    arr=list(input()[::1])
    ans=0
    for j in range(len(arr)):
        if arr[j]==".":arr[j]=1
        else:arr[j]=0
    #多加兩塊荒地,用於溢出    
    arr.append(0)
    arr.append(0)
    
    for j in range(len(arr)):
        if(arr[j]==1):
            ans+=1
            arr[j]=0
            arr[j+1]=0
            arr[j+2]=0
    print(f'Case {i+1}: {ans}')

 

arrow
arrow
    文章標籤
    高中生程式解題 C++
    全站熱搜
    創作者介紹
    創作者 趴趴熊日常 的頭像
    趴趴熊日常

    資工趴趴熊的小天地

    趴趴熊日常 發表在 痞客邦 留言(0) 人氣()