# String# Greedy# Math# Simulation

a868 - 8. St. Ives

🔗 前往 ZeroJudge 原題

題目描述

題目描述了一個類似於 "St. Ives" 謎語的數學問題。程式需要解析輸入,計算基於給定數字的乘積,並輸出最終的結果及其對應的單詞。輸入包含五行,描述了男人、同伴、容器、物件和物品的數量。程式需要根據輸入的數字計算總數,並輸出結果。

解題思路

程式碼模擬了題目描述的計算過程。它從輸入中讀取五行,每行包含一個數字,表示對應項目的數量。程式使用一個 word 陣列來儲存 2 到 13 的英文表示。對於每一行輸入,程式會將讀取的數字與 word 陣列中的英文表示進行比較。如果找到匹配項,則將對應的數字加 2(因為 word 陣列的索引從 0 開始),並將其乘以之前的結果。最終,程式會輸出計算出的總數及其對應的單詞。

複雜度分析

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

程式碼

/*A MAN WITH NUMBER COMPANIONS 
EACH COMPANION HAD NUMBER CONTAINERS 
EACH CONTAINER HAD NUMBER OBJECTS 
EACH OBJECT HAD NUMBER ITEMS 
HOW MANY SOMETHINGS?*/
#include <iostream>
using namespace std;
string word[12] = { "TWO", "THREE", "FOUR", "FIVE", "SIX", "SEVEN", "EIGHT", "NINE", "TEN", "ELEVEN", "TWELVE", "THIRTEEN" },tmp,q[5]={"MAN"};
int ans[5]={1},t;
int main(){
	for(int i=0;i<3;++i)cin >> tmp; 
	cin >> tmp >> q[1];
	for(int i=0;i<12;++i)
		if(word[i]==tmp){
			ans[1]=ans[0]*(i+2);
			break;
		}
	if(ans[1]==0)ans[1]=1;	
	for(int i=0;i<3;++i)cin >> tmp; 
	cin >> tmp >> q[2];
	for(int i=0;i<12;++i)
		if(word[i]==tmp){
			ans[2]=ans[1]*(i+2);
			break;
		}
	if(ans[2]==0)ans[2]=1;	
	for(int i=0;i<3;++i)cin >> tmp; 
	cin >> tmp >> q[3];
	for(int i=0;i<12;++i)
		if(word[i]==tmp){
			ans[3]=ans[2]*(i+2);
			break;
		}
	if(ans[3]==0)ans[3]=1;
	for(int i=0;i<3;++i)cin >> tmp; 
	cin >> tmp >> q[4];
	for(int i=0;i<12;++i)
		if(word[i]==tmp){
			ans[4]=ans[3]*(i+2);
			break;
		}
	if(ans[4]==0)ans[4]=1;
	cin >> tmp >> tmp >> tmp;
	string tt;
	for(int i=0,tl=tmp.length();i<tl-1;++i)
		tt+=tmp[i];
	for(int i=0;i<5;++i)
		if(tt==q[i])
			cout << ans[i] << " " << q[i];
}

Discussion