a868 - 8. St. Ives
題目描述
題目描述了一個類似於 "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];
}