亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++如何實現二維數組螺旋加密信息

發布時間:2021-12-31 16:44:11 來源:億速云 閱讀:239 作者:小新 欄目:開發技術

小編給大家分享一下C++如何實現二維數組螺旋加密信息,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

C++如何實現二維數組螺旋加密信息

C++如何實現二維數組螺旋加密信息

由題目要求可知 題目要求先創建一個r行c列的矩陣

然后輸入一串字符串 字符串長度肯定小于r*c/5

由A C M的表示方式可以看出每個字符由5位的二進制位系統表示(無符號位)

那么我們首先可以先創建一個字符串類型

string a;
cin>>a;

rt 字母表示它是26字母表中第幾個字母

很多人第一時間想用數組11對應 或者switch語句選擇

但轉念一想就知道太麻煩了 所以這里用字符的ASCII碼減去64來表示它的數字形式

轉ASCII碼都知道 強類型轉換

由于不止一個字符 為了提高代碼的復用性 我們專門寫個函數來返回字母的數字形式的二進制值

int bit(char a)  //定義一個將字母轉換為二進制數的函數 返回二進制數
{
    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;
}

二進制值有了 還得確保每個字母都能轉換為5位的二進制系統

故在循環之中再套循環 像00011這種啥數據類型都不是的玩意兒 最好直接給它套數組里去 所以我們先定義個數組

然后按流程把1和0放進去 并通過while循環補全0

for(int count0=0;count0<a.size();count0++)
    {
        int Tbits=bit(a[count0]);    //得到二進制數
        digits=judge(Tbits);  //判斷位數 將5位2進制數補全0
        times=digits-1;      //獲取位數 
        //從而將二進制數各個位數上的數字準確的填入數組
        while(digits!=5)
        {
            arr[s]=0;
            digits++;
            s++;
        }
        while(Tbits!=0)
	   {
		   d=Tbits%10; // 從最小位數開始 
		   arr[s+times]=d;
		   Tbits/=10;
		   times--;
	    }
	    s=5*(count0+1); //每個數都是5位 故讓每循環完一個字母讓索引+5
    }

這時我就達到了把每個5位二進制位系統的值都放進數組里去

但是根據題意可知 有空缺的地方 需要用0填充 故寫個for循環將剩下的空用0填充

for(int count1=a.size()*5;count1<(r*c);count1++)
    {
        arr[count1]=0; //將剩余的位置用0填充
    }

重頭戲來了

如何螺旋式將這個數組的每個數填到二維數組中去呢?

根據題意可知 填充方向是右下左上

故思路是:

先填充第一行 再填充最后一列 再填充最后一行 再填充第一列

填充完第一行 起始行變量+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++;
		}
	}

根據題意 還有一個大坑 這個惡心的出題人讓我們正常打印 即第一行 第二行 第三行....

真是處處都是坑

故直接一個嵌套for循環

for(i=0;i<r;i++){
		for(j=0;j<c;j++){
			cout<<array[i][j];
		}
	}
}

看完了這篇文章,相信你對“C++如何實現二維數組螺旋加密信息”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

简阳市| 当雄县| 威宁| 泗阳县| 贡觉县| 永济市| 苍梧县| 邵东县| 宁远县| 大名县| 高邑县| 文山县| 隆安县| 昌图县| 乌鲁木齐县| 温泉县| 饶平县| 山东| 诸暨市| 永宁县| 河北省| 平舆县| 江达县| 安泽县| 盱眙县| 遂溪县| 林州市| 泰和县| 阿尔山市| 江西省| 东辽县| 石楼县| 阿图什市| 申扎县| 格尔木市| 紫金县| 拜泉县| 屏东县| 武宁县| 思茅市| 北川|