網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
由題目要求可知 題目要求先創(chuàng)建一個(gè)r行c列的矩陣
然后輸入一串字符串 字符串長(zhǎng)度肯定小于r*c/5
由A C M的表示方式可以看出每個(gè)字符由5位的二進(jìn)制位系統(tǒng)表示(無(wú)符號(hào)位)
那么我們首先可以先創(chuàng)建一個(gè)字符串類型
string a; cin>>a;
rt 字母表示它是26字母表中第幾個(gè)字母
很多人第一時(shí)間想用數(shù)組11對(duì)應(yīng) 或者switch語(yǔ)句選擇
但轉(zhuǎn)念一想就知道太麻煩了 所以這里用字符的ASCII碼減去64來(lái)表示它的數(shù)字形式
轉(zhuǎn)ASCII碼都知道 強(qiáng)類型轉(zhuǎn)換
由于不止一個(gè)字符 為了提高代碼的復(fù)用性 我們專門寫個(gè)函數(shù)來(lái)返回字母的數(shù)字形式的二進(jìn)制值
int bit(char a) //定義一個(gè)將字母轉(zhuǎn)換為二進(jìn)制數(shù)的函數(shù) 返回二進(jìn)制數(shù) { int num=int(a)-64; int result = 0, j = 1; while(num){ result = result + j * (num % 2); num = num / 2; j = j * 10; } return result; }
二進(jìn)制值有了 還得確保每個(gè)字母都能轉(zhuǎn)換為5位的二進(jìn)制系統(tǒng)
故在循環(huán)之中再套循環(huán) 像00011這種啥數(shù)據(jù)類型都不是的玩意兒 最好直接給它套數(shù)組里去 所以我們先定義個(gè)數(shù)組
然后按流程把1和0放進(jìn)去 并通過(guò)while循環(huán)補(bǔ)全0
for(int count0=0;count0<a.size();count0++) { int Tbits=bit(a[count0]); //得到二進(jìn)制數(shù) digits=judge(Tbits); //判斷位數(shù) 將5位2進(jìn)制數(shù)補(bǔ)全0 times=digits-1; //獲取位數(shù) //從而將二進(jìn)制數(shù)各個(gè)位數(shù)上的數(shù)字準(zhǔn)確的填入數(shù)組 while(digits!=5) { arr[s]=0; digits++; s++; } while(Tbits!=0) { d=Tbits%10; // 從最小位數(shù)開(kāi)始 arr[s+times]=d; Tbits/=10; times--; } s=5*(count0+1); //每個(gè)數(shù)都是5位 故讓每循環(huán)完一個(gè)字母讓索引+5 }
這時(shí)我就達(dá)到了把每個(gè)5位二進(jìn)制位系統(tǒng)的值都放進(jìn)數(shù)組里去
但是根據(jù)題意可知 有空缺的地方 需要用0填充 故寫個(gè)for循環(huán)將剩下的空用0填充
for(int count1=a.size()*5;count1<(r*c);count1++) { arr[count1]=0; //將剩余的位置用0填充 }
重頭戲來(lái)了
如何螺旋式將這個(gè)數(shù)組的每個(gè)數(shù)填到二維數(shù)組中去呢?
根據(jù)題意可知 填充方向是右下左上
故思路是:
先填充第一行 再填充最后一列 再填充最后一行 再填充第一列
填充完第一行 起始行變量+1
填充完最后一列 末列變量-1
填充完最后一行 末行變量-1
填充完第一列 起始列變量+1
代碼如下:
int iStart=0,iEnd=r-1,jStart=0,jEnd=c-1,times1=0,i,j; while(iEnd>=iStart&&jEnd>=jStart){ //上面的行 for(j=jStart;j<=jEnd;j++){ array[iStart][j]=arr[times1]; times1++; } iStart++; //右邊的列 for(i=iStart;i<=iEnd;i++){ array[i][jEnd]=arr[times1]; times1++; } jEnd--; //下面的行 if(iEnd>=iStart){ for(j=jEnd;j>=jStart;j--){ array[iEnd][j]=arr[times1]; times1++; } iEnd--; } //左邊的列 if(jEnd>=jStart){ for(i=iEnd;i>=iStart;i--){ array[i][jStart]=arr[times1]; times1++; } jStart++; } }
根據(jù)題意 還有一個(gè)大坑 這個(gè)惡心的出題人讓我們正常打印 即第一行 第二行 第三行....
真是處處都是坑
故直接一個(gè)嵌套for循環(huán)
for(i=0;i<r;i++){ for(j=0;j<c;j++){ cout<<array[i][j]; } } }
完成!
原文鏈接:https://blog.csdn.net/m0_55169129/article/details/122236894
相關(guān)推薦
- 2022-07-21 nginx的禁止ip訪問(wèn)的配置方法和不緩存html
- 2022-06-23 教你編寫bat腳本W(wǎng)indows批處理_DOS/BAT
- 2022-12-07 React?diff算法超詳細(xì)講解_React
- 2023-07-09 echarts的series已經(jīng)為空但是還加載出數(shù)據(jù)
- 2022-12-23 python中的列表和元組實(shí)例詳解_python
- 2023-07-13 react 非授控組件和授控組件的區(qū)別
- 2022-12-22 go?time.Sleep睡眠指定時(shí)間實(shí)例詳解(小時(shí)級(jí)到納秒級(jí))_Golang
- 2022-03-24 .Net?Core微服務(wù)網(wǎng)關(guān)Ocelot超時(shí)、熔斷、限流_自學(xué)過(guò)程
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支