# Greedy# Simulation# Conditional Logic

b216 - 1. 棒球九宮格

🔗 前往 ZeroJudge 原題

題目描述

題目描述了一個棒球九宮格遊戲,玩家投擲九個球,根據球落入九宮格的位置,判斷是否擊倒木板。遊戲結束後,根據倒下的木板數量計算連成線的數量,以及根據擊倒的格子號碼計算加碼積分。

解題思路

程式碼模擬了投球過程,並根據座標判斷球落入的格子。使用一個陣列 sq 記錄每個格子是否被擊倒。然後,程式碼檢查是否連成線,並計算加碼積分。連線的判斷使用了硬編碼的方式,直接檢查所有可能的連線組合。加碼積分的計算也使用了硬編碼的方式,根據格子號碼賦予不同的分數。

複雜度分析

  • 時間複雜度: O(1)
  • 空間複雜度: O(1)

程式碼

#include <iostream>
using namespace std;
int main(){
	int x,y,sum=0,line=0;
	int sq[10]={0};
	for(int i=0;i<9;i++){
		cin >> x >> y;
		if(x>0&&x<10&&y>0&&y<10){
			sq[7]=1;
		}
		else if(x>0&&x<10&&y>10&&y<20){
			sq[4]=1;
		}
		else if(x>0&&x<10&&y>20&&y<30){
			sq[1]=1;
		}
		else if(x>10&&x<20&&y>0&&y<10){
			sq[8]=1;
		}
		else if(x>10&&x<20&&y>10&&y<20){
			sq[5]=1;
		}
		else if(x>10&&x<20&&y>20&&y<30){
			sq[2]=1;
		}
		else if(x>20&&x<30&&y>0&&y<10){
			sq[9]=1;
		}
		else if(x>20&&x<30&&y>10&&y<20){
			sq[6]=1;
		}
		else if(x>20&&x<30&&y>20&&y<30){
			sq[3]=1;
		}
	}
	if(sq[1]==1&&sq[2]==1&&sq[3]==1){
		line++;
	}
	if(sq[4]==1&&sq[5]==1&&sq[6]==1){
		line++;
	}
	if(sq[7]==1&&sq[8]==1&&sq[9]==1){
		line++;
	}
	if(sq[4]==1&&sq[1]==1&&sq[7]==1){
		line++;
	}
	if(sq[2]==1&&sq[5]==1&&sq[8]==1){
		line++;
	}
	if(sq[3]==1&&sq[9]==1&&sq[6]==1){
		line++;
	}
	for(int i=1;i<10;i++){
		if(sq[i]==1){
			if(i==1||i==3||i==7||i==9)
				sum+=8;
			else if(i==5)
				sum+=2;
			else
				sum+=5;	
		}
	}
	if(sq[2]==1&&sq[5]==1&&sq[9]==1&&sq[8]==1){
		sum+=20;
	}
	if(sum==74)
		sum-=20;
	cout << line << " " << sum << "\n";
}

Discussion