标签:移动
密码加密问题
个人信息:就读于燕大本科软件工程专业 目前大三;
本人博客:google搜索“cqs_2012”即可;
个人爱好:酷爱数据结构和算法,希望将来从事算法工作为人民作出自己的贡献;
编程语言:C++ ;
编程坏境:Windows 7 专业版 x64;
编程工具:vs2010;
制图工具:office 2010 powerpoint;
硬件信息:7G-3 笔记本;
真言
题目如果自己没有完成任务,不是任务的问题,是自己的问题
思路百练 2818
ac代码1 暴力法,计算一次,移动一次
2优化: 计算一次,跟踪一次,再计算,在跟踪;最后在移动
3再优化:计算需要移动的次数,计算最终结果,然后移动
#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; }
标签:移动
原文地址:http://blog.csdn.net/cqs_experiment/article/details/37503845