OpenJudge NOI 1.8 25:螺旋加密
生活随笔
收集整理的這篇文章主要介紹了
OpenJudge NOI 1.8 25:螺旋加密
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【題目鏈接】
OpenJudge NOI 1.8 25:螺旋加密
【題目考點】
1. 進制轉換
2. 二維數組
【解題思路】
先cin整型變量讀入行列數r與c,再用cin.get()或getchar()吸收一個空格,再使用cin.getline()讀入帶空格的字符串
遍歷字符串,把每個字符轉為對應的數字,將數字轉為二進制數字,以回形遍歷方式填充到二維數組中。
回形遍歷的寫法可以參考OpenJudge NOI 1.8 23:二維數組回形遍歷
最后按行遍歷二維數組,輸出數字即可。
【題解代碼】
解法1:
#include <bits/stdc++.h> using namespace std; int r, c, a[25][25], fi, fj;//(fi, fj)焦點位置 int d, dir[4][2] = {{0,1},{1,0},{0,-1},{-1,0}};//右下左上 int main() {char s[85];cin >> r >> c;getchar();//吸收空格cin.getline(s, 105);int len = strlen(s), num, si, sj;fi = fj = 1;//初始焦點位置為(1,1) memset(a, -1, sizeof(a));//a初值都設為-1 for(int i = 0; i < len; ++i){if(s[i] == ' ')num = 0;elsenum = s[i] - 'A' + 1;int b[6] = {}, bi = 0;//把num轉化成的二進制數字填入數組b,b[1]為低位 b[5]為高位for(int a = num; a > 0; a /= 2)b[++bi] = a % 2;for(int j = 5; j >= 1; --j)//從高位遍歷到低位 {a[fi][fj] = b[j];//回形填充到數組a si = fi + dir[d][0], sj = fj + dir[d][1];//(si,sj)下一個位置if(si > r || si < 1 || sj > c || sj < 1 || a[si][sj] != -1)//如果下一次移出了范圍或下一個位置有值 d = (d + 1) % 4;//改變方向 fi += dir[d][0], fj += dir[d][1];//移動焦點}}for(int i = 1; i <= r; ++i)for(int j = 1; j <= c; ++j)if(a[i][j] == -1)//值為-1的地方應該填充0 a[i][j] = 0;for(int i = 1; i <= r; ++i)for(int j = 1; j <= c; ++j)cout << a[i][j];return 0; }總結
以上是生活随笔為你收集整理的OpenJudge NOI 1.8 25:螺旋加密的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信息学奥赛一本通 1200:分解因数 |
- 下一篇: 信息学奥赛一本通 1315:【例4.5】