首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

100分请问一个小算法

2012-03-04 
100分请教一个小算法问题描述如下:1. 数组A长度为7,里面存a,b,c,d,e,f,g2. 数组B长度7,数

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"

热点排行