sicily--1036. Crypto Columns

输入keyword, 计算出矩阵的“列数”;

输入plaintext,计算出整个字符串的长度,继而计算出矩阵的行数; 一直错在这里,不能简单的plaintext.size() / keyword.size()

找出keyword中最小的且还没储存的列数,储存字符;

输出结果

#include<iostream>
#include<string>
#include<cstring>
#include<vector>
using namespace std;

int main()
{
	string keyword;//输入keyword
	while(cin >> keyword && keyword != "THEEND")
	{
		bool flag[10];//标记是否已访问
		memset(flag, 0, sizeof(flag));//初始化未访问
		int rows;//矩阵行数
		vector<char> column[10];
		
		string plaintext;
		cin >> plaintext;//输入明文
		if(plaintext.size() % keyword.size() == 0)
			rows = plaintext.size() / keyword.size();
		else
			rows = plaintext.size() / keyword.size() + 1;//文字长度除以列数,得行数

		int start = 0;
		for(int i = 0; i < keyword.size(); i++)
		{
			int minColumn;
			for(int n = 0; n < keyword.size(); n++)//找最小的列
			{
				if(!flag[n])
				{
					minColumn = n;
					break;
				}
			}
			for(int j = 0; j < keyword.size();j++)
			{
				if(keyword[minColumn] > keyword[j] && !flag[j])//表示第J列仍未被访问
				{
					minColumn = j;
				}
			}
			flag[minColumn] = true;//已访问
			for(int k = 0; k < rows; k++)
			{
				column[minColumn].push_back(plaintext[start]);
				start++;
			}
		}

		for(int i = 0; i < rows; i++)
		{
			for(int j = 0; j < keyword.size(); j++)
			{
				cout << column[j][i];
			}
			
		}
		cout << endl;
	}
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值