a700 - 2、国王的麦子(Wheat)
題目描述
題目描述一個 7x8 的棋盤,棋盤上的每個格子包含一個數字,數字的規律是隨著行和列的增加而指數級增長。題目要求讀取多組輸入,每組輸入包含行號 i 和列號 j,然後輸出棋盤上第 i 行第 j 列的數字。
解題思路
題目要求計算棋盤上特定位置的數字,觀察棋盤的規律可以發現,每個數字都是 2 的冪次方。棋盤的行和列號碼可以轉換為對應的冪次方。具體來說,第 i 行第 j 列的數字是 2^(8*(i-1) + (j-1))。程式碼首先預先計算出所有可能的數字,並儲存在一個陣列中。然後,對於每組輸入,根據行號和列號計算陣列的索引,並輸出對應的數字。
複雜度分析
- 時間複雜度: O(1)
- 空間複雜度: O(64)
程式碼
#include <stdio.h>
long long int a[65];
int main(){
long long int n=1;
for(int i=0;i<64;i++){
a[i]=n;
n<<=1;
}
int x,y;
while(scanf("%d%d",&x,&y)>0){
printf("%lld\n",a[x*8+y-9]);
}
}