码迷,mamicode.com
首页 > 其他好文 > 详细

密码加密问题

时间:2014-07-08 16:17:01      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:移动

密码加密问题

个人信息:就读于燕大本科软件工程专业 目前大三;

本人博客:google搜索“cqs_2012”即可;

个人爱好:酷爱数据结构和算法,希望将来从事算法工作为人民作出自己的贡献;

编程语言:C++ ;

编程坏境:Windows 7 专业版 x64;

编程工具:vs2010;

制图工具:office 2010 powerpoint;

硬件信息:7G-3 笔记本;


真言

如果自己没有完成任务,不是任务的问题,是自己的问题

题目

百练 2818

思路

1 暴力法,计算一次,移动一次

2优化: 计算一次,跟踪一次,再计算,在跟踪;最后在移动

3再优化:计算需要移动的次数,计算最终结果,然后移动

ac代码

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

bool my_2818(vector<string> * myvector);

int main()
{
	bool sum = true;
	vector<string> * myvector = new vector<string>;
	vector<string>::iterator it;
	while(sum == true)
		sum = my_2818( myvector );
	it = myvector->begin();
	while(it < myvector->end())
	{
		cout<<*it<<endl;
		it++;
	}
	system("pause");
	return 0;	
}

bool my_2818(vector<string> * myvector)
{
	int n;
	cin>>n;
	if(n == 0)
	{
		return false;
	}
	int * data = new int[n];
	int *length = new int[n];
	for(int i=0;i<n;i++)
	{
		cin>>data[i];
		length[i] = 0;
	}

	for(int j,i=0;i<n;i++)
	{		
		j = data[i]-1;
		length[i]++;
		while(true)
		{
			if(j == i)
				break;
			j = data[j]-1;
			length[i]++;
		}
	}

	int k;
	string a;
	char* b = new char[n];
	char c;
	while(true)
	{
		cin>>k;
		if(k == 0)
			break;
		for(int i=0;i<n;i++)
		{
			b[i] = ' ';
		}
		getline(cin,a,'\n');
		a=a.substr(1,a.length()-1);
		while(a.length()<n)
			a+=' ';

		for(int i=0;i<n;i++)
		{
			int j = k % length[i];
			int m = i;
			while(j>0)
			{
				m = data[m]-1;
				j--;
			}
			b[m] = a[i];
		}
		string result="";
		for(int j=0;j < n;j++)
			result+=b[j];

		myvector->push_back(result);
	}
	myvector->push_back("");
	return true;
}




密码加密问题,布布扣,bubuko.com

密码加密问题

标签:移动

原文地址:http://blog.csdn.net/cqs_experiment/article/details/37503845

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!