超难算法!高手请进!

tanshiyang82 2005-03-31 05:17:55
请问如何将下列字母排列均匀
a a a
b b
c c c c c
d
f f f f

以下是排列结果的一个解:
c f a b c f a c d b c f a c f
...全文
1005 21 打赏 收藏 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
plax0850 2005-06-11
  • 打赏
  • 举报
回复
哈哈,拜倒
foochow 2005-06-11
  • 打赏
  • 举报
回复
楼主排列均匀的定义是什么东东啊
ply6669747 2005-06-11
  • 打赏
  • 举报
回复
收藏先
wwwtony110 2005-06-11
  • 打赏
  • 举报
回复
基本上明白意思~~但是不会做~~顶顶
yangman211 2005-06-10
  • 打赏
  • 举报
回复
楼主的例子不均呀
kakaprince 2005-05-14
  • 打赏
  • 举报
回复
Surelysun()
均匀的定义我觉得就是每个相同的字符之间的间距尽可能的远?
我大概的思考了一下,可以这样做:
用插入法,从最少元素开始;
首先把最少的安排好,然后把此少的插入,以此类推;
插入的规则就是把已有的字符A分成n+1(n=待插入字符B的个数)段,然后把B依次插入这n+1段的中间。

大概思想就是这样子,等我有时间把程序搞出来,请高手指点一下。
================================
我觉得是对的,但我想应该是先安排最多的元素!//我觉得可以用平方算法,把每个字母与最近的相同字母间相隔元素的平方和计算出来,另外加上每种字母离两端的平方和,取最小值
guanguang 2005-05-14
  • 打赏
  • 举报
回复
我觉的均匀通俗的讲就是指:1:多的先排;
2:不能重排;
3:若个数相同,选相距较远。
FromZteToHw 2005-04-28
  • 打赏
  • 举报
回复
Surelysun()
均匀的定义我觉得就是每个相同的字符之间的间距尽可能的远?
我大概的思考了一下,可以这样做:
用插入法,从最少元素开始;
首先把最少的安排好,然后把此少的插入,以此类推;
插入的规则就是把已有的字符A分成n+1(n=待插入字符B的个数)段,然后把B依次插入这n+1段的中间。

大概思想就是这样子,等我有时间把程序搞出来,请高手指点一下。
================================
我觉得是对的,但我想应该是先安排最多的元素!
听海拉拉 2005-04-26
  • 打赏
  • 举报
回复
xuexi
zhongwei5695 2005-04-26
  • 打赏
  • 举报
回复
真是very very.....不懂^_^
Rockford 2005-04-18
  • 打赏
  • 举报
回复
没说明白意思呀
算法实现的目的是什么呢
不知道要作什么?
tsrs 2005-04-16
  • 打赏
  • 举报
回复
不理解!
qrlvls 2005-04-16
  • 打赏
  • 举报
回复
简直就超难,晕
ljq14 2005-04-09
  • 打赏
  • 举报
回复
不明白题意~~~~~~~~~~
up
MagicCarmack 2005-04-07
  • 打赏
  • 举报
回复
有些难度
nasi00 2005-04-02
  • 打赏
  • 举报
回复
所谓“均匀”是指什么?
Surelysun 2005-04-02
  • 打赏
  • 举报
回复
均匀的定义我觉得就是每个相同的字符之间的间距尽可能的远?
我大概的思考了一下,可以这样做:
用插入法,从最少元素开始;
首先把最少的安排好,然后把此少的插入,以此类推;
插入的规则就是把已有的字符A分成n+1(n=待插入字符B的个数)段,然后把B依次插入这n+1段的中间。

大概思想就是这样子,等我有时间把程序搞出来,请高手指点一下。
shine51151 2005-04-01
  • 打赏
  • 举报
回复
是输出所有的解还是输出一个解呢?
我把你的排列“均匀”理解为两两相邻的字母不同不知道对不对?
一下程序输出一个解,如要更多的解可调整循环变量i的初始值。

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

void main()
{
char str[]="aaabbcccccdffff";
int n=strlen(str);

char *put=new char[n+1] ;
int j=0;


put[0]=str[0];
str[0]='\0';
j++;

for(int i=1;;i++)
{

if(!str[i])
continue;

if(str[i] != put[j-1])
{
put[j]=str[i];
j++;
str[i]='\0';
}

if(j==n)
{
put[j]='\0';
break;
}

if(i==n-1)
{
i=-1;
}


}

cout << put << endl << endl;
}
qjsh 2005-03-31
  • 打赏
  • 举报
回复
现在不会
arrowcy 2005-03-31
  • 打赏
  • 举报
回复
果然是超难,题目的意思我都理解不了啊
加载更多回复(1)

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧