[C_SL16-中] 計算z-order
Input File Format輸入的第一行為一個整數 n ,代表底下有幾筆測資。接著共有 n 行的測資。每筆測資中包含了 2 個整數(以 10 進位表示),這兩個整數以逗號隔開。第一個整數為 column 編號。第 2 個整數為 row 編號。兩個整數間沒有空白。
Output Format輸出每個測資所對應的 z-order 值。每一行為一個 z-order 值。
Example
Sample Input: | Sample Output: |
2 1,1 1,2 | 3 9 |
- #include <iostream>
- #include <string>
- #include <sstream>
- #include <cmath>
- using namespace std;
- int main() {
- // [C_SL16-中] 計算z-order
- // g++(c++11)
- int n;
- cin >> n;
- for(int i = 0; i < n;i++)
- {
- string input;
- cin >> input;
- stringstream ss(input);
- string token;
- int count = 0;
- string col, row;
- //字串切割
- while (getline(ss, token, ','))
- {
- //先進來的是col, 後進來的是row
- if(count == 0)
- {
- col = token;
- }
- else if(count == 1)
- {
- row = token;
- }
- count++;
- }
- int i_col = stoi(col);
- int i_row = stoi(row);
- int bin[16];//交錯完結果
- int arr_col[8];//col二進位
- int arr_row[8];//row二進位
- fill(arr_col, arr_col+8, 0);
- fill(arr_row, arr_row+8, 0);
- int num = i_col;
- //10進位轉2進位
- for(int j = 7;j >= 0;j--)//column
- {
- if(num >= pow(2,j))
- {
- num = num - pow(2,j);
- arr_col[7-j]++;
- }
- }
- num = i_row;
- for(int j = 7;j >= 0;j--)//row
- {
- if(num >= pow(2,j))
- {
- num = num - pow(2,j);
- arr_row[7-j]++;
- }
- }
- count = 0;
- //交錯
- for(int j = 1;j < 16;j+=2)//column
- {
- bin[j] = arr_col[count];
- count++;
- }
- count = 0;
- for(int j = 0;j < 16;j+=2)//row
- {
- bin[j] = arr_row[count];
- count++;
- }
- //將交錯結果由2進位轉成10進位
- int result = 0;
- for(int j = 0;j < 16;j++)//fin
- {
- result = result + bin[j]*pow(2,(15-j));
- }
- cout << result << endl;
- fill(bin, bin+16, 0);
- }
- return 0;
- }
沒有留言:
張貼留言