读书人

100分请问一个小算法

发布时间: 2012-03-04 11:13:33 作者: rapoo

100分请教一个小算法
问题描述如下:
1. 数组A长度为7,里面存'a','b','c','d','e','f','g'
2. 数组B长度<=7,数据由用户输入,为数组A的子集,例如{'b','a','e','c','g'}, {'e','f','c'}
3. 现在要求输出长度为7的数组C,数组C的数据顺序要求在满足数组B的前提下尽量满足数组A

例如:
1. 输入{'b','a','e','c','g'}
输出b,a,e,c,d,f,g
2. 输入{'e','f','c'}
输出a,b,d,e,f,c,g
3. 输入{'f','b'}
输出a,f,b,c,d,e,g

编程语言不限,能给出正确算法也送分,谢谢!

[解决办法]
输入{ 'b ', 'a ', 'e ', 'c ', 'g '}
输出b,a,e,c,d,f,g

怎么个满足B法??
[解决办法]
输入baecg
输出的序列中字母b a e c g的相对位置满足B
[解决办法]
#include <vector>
#include <iostream>
#include <algorithm>
using std::vector;
using std::cout;
using std::endl;
using std::copy;

void output_char(vector<char>&a, vector<char>&b)
{
const int n = a.size();
vector<char>*c = new vector<int>[n];
copy(b.begin(), b.end(), c.begin() );
for(vector<char>::iterator ita = a.begin(); ita != a.end(); ita++)
{
for(int i = 0, vector<char>::iterator itc = c.begin(); itc != c.end(); itc++)
{
if(*ita < *itc )
i++;
if(*itc < *ita < *(++itc) )
{
c.insert(itc, *ita);
}
}
if(i == c.size())
{
c.insert(itc, *ita);
}
}
}
没时间了,功能还没作全。。。
[解决办法]
输入baecg
输出是不是应该为badecg?
这样会更加满足A
[解决办法]
1,先把C置为B
2,从A中选一个C中没有的字符ch,插入C中,使C中ch左边比ch小的字符个数 加上 C中ch右边比ch大的字符个数 最大
3,重复2,直到A中的字符都已经插入到C中

输入{ 'b ', 'a ', 'e ', 'c ', 'g '}
C = "baecg"
1,从A中取d,d在ae间(左边比d小的有ba 2个,右边比d大的有eg2个,2+2=4) 或cg间(左边比d小的有bac 3个,右边比d大的有g 1个,3+1=4都可以)
第一中方案 C="badecg"
2,从A中取f,只有cg间最优
最后 C="badecfg"

读书人网 >软件架构设计

热点推荐