C-偶遇行军蚁(遇到过的题,做个笔记)

我的代码:

思路就是把每一行看成一个字符串,然后逐渐增加字符就行

#include <iostream>
#include <vector>
using namespace std;
int main()
{
	string s;
	int n;
	cin >> n;			//读入行数
	cin >> s;			//读入字符串
	vector<string>arr(n);		//定义string类数组
	if (n == 1)			//发现只弄成1行,则直接原样输出就行
	{
		cout << s << endl;;
		return 0;
	}
	int now = 0;	//现在所在行
	int dx = 1;			//行偏移量
	for (int i = 0; i < s.size(); i++)
	{
		arr[now] += s[i];			//将该行字符串加上字符
		now += dx;				//挪动所在行
		if (now == 0 || now == n-1)	dx = -dx;		//如果到第一行或最后一行,行偏移要取反
	}
	for (int i = 0; i < n; i++)
		cout << arr[i];
	return 0;
}

以前写的题解(不是很好)

#include <iostream>
#include <vector>			//为了使用vector容器
using namespace std;
int main()
{
	int n;			//多少行
	string s;			//要输入的字符串
	cin >> n;
	cin >> s;
	vector<vector<char>>arr(n, vector<char>(1005));	//用vector容器弄二维数组,n行,列数先填大些,后续会判断到底多少列,默认数组里的量全是0
	int x = 0;			//arr数组的横坐标
	int y = 0;			//arr数组的纵坐标
	int k = 0;				//用来对字符串s进行索引
	int list_num = 0;			//定义arr数组的实际列数
	if(n==1)			//特殊判断
	{
		cout<<s;
		return 0;
	}
	while (1)			//不知道循环几次就死循环,到时候跳过
	{
		int flag = 1;		//1代表还没终止(还没到字符串最后)
		for (int i = 0; i < n && flag == 1; i++)		//往下走,只要没终止就一直把字符串s的量填到arr数组中
		{							//因为有n行,所以循环n次
			arr[x++][y] = s[k++];		//沿着路径往下走,注意是后自增(画图,手写坐标就明白了)
			if (k == s.size())			//当k==字符串s的大小,则表示字符串的量全填进arr数组中了
			{
				flag = 0;		//0代表终止了,到字符串最后了
				break;			//跳出for循环
			}
		}
		list_num++;		//沿着路径一直往下走的走完了,让实际列数list_num加1
		x = x - 2;		//若n为4,则这里时,x为4,-2后,x变为2,,这么是为了下面的后自增(画图,自己手写坐标就知道了)
		y = y + 1;		//若n为4,则这里时,y为0.+1后,y=1,这么是为了下面的后自增(画图,自己手写坐标就知道了)
		for (int i = 0; i < n - 2 && flag == 1; i++)//该斜着走,循环次数是n-2次,只要没终止就一直把字符串s的量填到arr数组中
		{
			list_num++;		//因为斜着走,实际列数必定每次循环都会加1
			arr[x--][y++] = s[k++];	//沿着路径该斜着走了,注意是后自增(画图,手写坐标就明白了)
			if (k == s.size())
			{
				flag = 0;
				break;
			}
		}
		if (flag == 0)	break;	//当终止了(即到字符串最后了)结束while死循环

	}
	for (int i = 0; i < n; i++)				//开始输出arr数组中的数,就按正常输出2维数组那样输出
	{
		for (int j = 0; j < list_num; j++)			//注意这里j是<list_num (跟实际有n行,i<n一个道理)
		{
			if (arr[i][j] == 0)	continue;	//当发现该坐标,数组中的数是0,则跳过(出现0跟当初定义vector容器时有关)
			else cout << arr[i][j];			//否则就正常输出数组中正常的数
		}
	}

	return 0;
}

参考(来自学长们题解):

相关推荐

  1. <span style='color:red;'>C</span>++<span style='color:red;'>做</span><span style='color:red;'>题</span>

    C++

    2024-04-03 04:40:02      9 阅读
  2. 笔记:SQL Sever 方式牛客SQL题目--VQ29

    2024-04-03 04:40:02       32 阅读
  3. 笔记:SQL Sever 方式牛客SQL题目--VQ35

    2024-04-03 04:40:02       29 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-03 04:40:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-03 04:40:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-03 04:40:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-03 04:40:02       18 阅读

热门阅读

  1. maya 遍历所有子节点

    2024-04-03 04:40:02       13 阅读
  2. 关于Kafka消息队列的深入学习

    2024-04-03 04:40:02       15 阅读
  3. 蓝桥杯_数学模板

    2024-04-03 04:40:02       14 阅读
  4. 2021年社招面试

    2024-04-03 04:40:02       16 阅读
  5. 剑指offer打卡 JZ10 斐波那契数列

    2024-04-03 04:40:02       14 阅读
  6. 理解MYSQL底层索引

    2024-04-03 04:40:02       17 阅读
  7. 搜索引擎-01-概览

    2024-04-03 04:40:02       14 阅读
  8. 父类子类继承关系

    2024-04-03 04:40:02       14 阅读
  9. 存放自定义数据类型的大/小根堆定义

    2024-04-03 04:40:02       13 阅读