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++二维数组螺旋加密信息的文章就介绍到这了,更多相关C++二维数组螺旋加密内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C++递归实现螺旋数组的实例代码

    仅供参考,若有可改进之处,欢迎一起交流! #include<iostream> using namespace std; //参数x表示开始元素的下标,m,n用于确定4条边尽头. //a,b则用于判断是否可进行螺旋.p为二维数组. void lx(int x,int m, int n, int a, int b, int **p); int main() { //输入行列 int m = 0, n = 0; cin >> m >> n; int **a = new in

  • C++二维数组螺旋加密信息

    由题目要求可知 题目要求先创建一个r行c列的矩阵 然后输入一串字符串 字符串长度肯定小于r*c/5 由A C M的表示方式可以看出每个字符由5位的二进制位系统表示(无符号位) 那么我们首先可以先创建一个字符串类型 string a; cin>>a; rt 字母表示它是26字母表中第几个字母 很多人第一时间想用数组11对应 或者switch语句选择 但转念一想就知道太麻烦了 所以这里用字符的ASCII码减去64来表示它的数字形式 转ASCII码都知道 强类型转换 由于不止一个字符 为了提高代码的

  • thinkphp 3.2框架视图模型 实例视图查询结果的二维数组合并操作示例

    本文实例讲述了thinkphp 3.2框架视图模型 实例视图查询结果的二维数组合并操作.分享给大家供大家参考,具体如下: 使用视图模型查询的时候 结果是这样的 array(6) { [0] => array(5) { ["picTitle"] => string(7) "标题2" ["picCategroy"] => string(6) "海报" ["picAuthor"] => s

  • C语言二维数组应用之扫雷游戏

    本文实例为大家分享了C语言实现扫雷游戏的具体代码,供大家参考,具体内容如下 上次用数组完成了一个井字棋,接下来用数组完成一个简易版扫雷. <扫雷>是一款大众类的益智小游戏,于1992年发行.游戏目标是在短的时间内根据格子出现的数字找出所有非雷格子,同时避免踩雷,踩到一个雷即全盘皆输. 根据上述定义,我们可知,游戏胜利的要求是:找出所有非雷的格子. 现在我们简单梳理一下完成游戏的思路 一.变量定义 1.首次要定义地图变量,这里注意要定义两个二维数组,一个用来存放地雷的分布情况,另一个存放玩家看见

  • C语言之关于二维数组在函数中的调用问题

    目录 关于二维数组在函数中的调用问题 函数调用二维数组 二维数组如何放到函数中使用 下面以一个二维矩阵的转置为例 关于二维数组在函数中的调用问题 之前在学习二维数组的时候感觉理解起来很简单,所以理解一下就过去了,但是当自己真正的去用二维数组数组解决一些问题(特别是在函数调用二维数组的过程中)才真正发现原来使用起来还是要去注意一些细节的.废话不多说,直接上干货! 函数调用二维数组 在函数中调用二维数组的具体格式如下: 1.声明:这是声明的两种格式,在这里定义的是一个N*5的二维字符数组,各位看官一

  • IOS开发基础之二维数组详解

    IOS开发基础之二维数组详解 首先我们知道OC中是没有二维数组的,二维数组是通过一位数组的嵌套实现的,但是别忘了我们有字面量,实际上可以和C/C++类似的简洁地创建和使用二维数组.这里总结了创建二维数组的两种方法以及数组的访问方式. 通过字面量创建和使用二维数组(推荐) // 1.字面量创建二维数组并访问(推荐) NSArray *array2d = @[ @[@11,@12,@13], @[@21,@22,@23], @[@31,@32,@33] ]; // 字面量访问方式(推荐) NSLog

  • PHP简单实现二维数组赋值与遍历功能示例

    本文实例讲述了PHP简单实现二维数组赋值与遍历功能.分享给大家供大家参考,具体如下: 示例1: <?php $loptop1['lid'] = 1000; $loptop1['pic'] = 'img/1.png'; $loptop1['title'] = 'L1'; $loptop1['price'] = 5000; $loptop1['isOnSale'] = 1; $loptop1['shelfTime'] = 1234556; $loptop2['lid'] = 1001; $lopto

  • PHP二维数组矩形转置实例

    PHP二维数组矩形转置实例 <?php //二维数组转置 //定义一个二维数组 $arr =array(array(1,2,3),array(4,5,6)); //定义一个数组来放置转置的数据 $arr1=array(); //转置前遍历 echo "转置前:<br/>"; for($i=0;$i<count($arr);$i++){ for($j=0;$j<count($arr[$i]);$j++){ echo $arr[$i][$j]; } echo

  • php 二维数组快速排序算法的实现代码

    php 二维数组快速排序算法的实现代码 二维数组排序算法与一维数组排序算法基本理论都是一样,都是通过比较把小的值放在左变的数组里,大的值放在右边的数组里在分别递归. 实例代码: <?php class Bubble { private function __construct() { } private static function sortt($data) { if (count ( $data ) <= 1) { return $data; } $tem = $data [0]['sco

  • PHP 如何获取二维数组中某个key的集合

    本文为代码分享,也是在工作中看到一些"大牛"的代码,做做分享. 具体是这样的,如下一个二维数组,是从库中读取出来的. 代码清单: 复制代码 代码如下: $user = array( 0 => array( 'id' => 1, 'name' => '张三', 'email' => 'zhangsan@sina.com', ), 1 => array( 'id' => 2, 'name' => '李四', 'email' => 'lisi@

  • Python创建二维数组实例(关于list的一个小坑)

    0.目录 1.遇到的问题 2.创建二维数组的办法 •3.1 直接创建法 •3.2 列表生成式法 •3.3 使用模块numpy创建 1.遇到的问题 今天写Python代码的时候遇到了一个大坑,差点就耽误我交作业了... 问题是这样的,我需要创建一个二维数组,如下: m = n = 3 test = [[0] * m] * n print("test =", test) 输出结果如下: test = [[0, 0, 0], [0, 0, 0], [0, 0, 0]] 是不是看起来没有一点问

随机推荐