日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OpenJudge NOI 1.8 25:螺旋加密

發布時間:2025/3/17 编程问答 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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:螺旋加密的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。