谁给个重排算法

srg777 2007-01-16 08:02:34
VC++
谁给个算法
我有个数(不确定)

例如:

数组A { 0,1,2....350 } ( 0 - 350 连续)

↓ 随机打乱后 赋值给

数组B { ... }

...全文
174 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
IMGGTOO 2007-01-17
  • 打赏
  • 举报
回复
我把随机数的产生方式和比较字符串相等的方式做了下改变,你注意下.
IMGGTOO 2007-01-17
  • 打赏
  • 举报
回复
CStringArray g_strA;
int intT = 20; // 定义(0-19)的数
int nLoop = 0; //记录循环次数
CString str,str1;
g_strA.SetSize(intT); // 定义树组空间
for (int i=0 ; i<intT; i++)
{
int RANGE_MIN = 0; // 下限
int RANGE_MAX = 20; // 上限
int a = rand()%RANGE_MAX + RANGE_MIN; // 随机选择
str.Format(_T("%d"),a);
bool bNoCase = true;
for(int j=0;j<g_strA.GetCount();j++) //比较所有数组空间
{

if(g_strA.GetAt(j) != str) // 当前与数组比较
{
continue;
}
else
{
bNoCase = false;
break;
}
}
if(bNoCase)
{
g_strA.Add(str); // 放入数组
str1 += "\n";
str1 += str;// 放入显示里
}
else
{
i--; // 有重复在来一边
}
nLoop++;
}

str.Format(_T("\n外循环总次数:%d"),nLoop);
str1 += str;
MessageBox(str1);

这是完整的代码,我自己在VS 2005上测试了下,没有重复的.并且加了一个变量nLoop用于记录外循环总次数.基本上上每次循环次数在40-100之间,你可以自己测下!
srg777 2007-01-17
  • 打赏
  • 举报
回复
测试了楼上的代码
还是有重复的!
IMGGTOO 2007-01-16
  • 打赏
  • 举报
回复
for(int j=0;j<intT;j++) //比较所有数组空间
{
if(g_strA.GetAt(j).CompareNoCase(str)) // 当前与数组比较
{
g_strA.Add(str); // 放入数组
j=intT+1; // 退出循环

str1 =str1 + "\n"+ str ; // 放入显示里
}
else
i--; // 有重复在来一边
}

//////////////////////////////////////////////
bool bNoCase = true;
for(int j=0;j<g_strA.GetCount();j++) //比较所有数组空间
{
if(g_strA.GetAt(j).CompareNoCase(str))
continue;
else
{
bNoCase = false;
break;
}
}
if(bNoCase)
{
g_strA.Add(str);
str1 =str1 + "\n"+ str ; // 放入显示里
}
else
{
i--;
}

///////////////////////////////////
这样做,应该不会再有重复了.但是这种做法,总的来说,效率会非常低.你可以在里面加一个变量,记录下看看外循环总共循环了多少次!应该是远大于你所定义的数组元素个数的.
srg777 2007-01-16
  • 打赏
  • 举报
回复
复制 到VC++ 直接运行,帮我看看,怎么还是有重复的

CStringArray g_strA;
int intT = 20; // 定义(0-19)的数
CString str,str1;

g_strA.SetSize(intT); // 定义树组空间

for (int i=0 ; i<intT; i++)
{
int RANGE_MIN = 0; // 下限
int RANGE_MAX = 20; // 上限
int a =(((double) rand()/(double) RAND_MAX) * RANGE_MAX + RANGE_MIN); // 随机选择

str.Format("%d",a);
for(int j=0;j<intT;j++) //比较所有数组空间
{
if(g_strA.GetAt(j).CompareNoCase(str)) // 当前与数组比较
{
g_strA.Add(str); // 放入数组
j=intT+1; // 退出循环

str1 =str1 + "\n"+ str ; // 放入显示里
}
else
i--; // 有重复在来一边
}
}

MessageBox(str1);
IMGGTOO 2007-01-16
  • 打赏
  • 举报
回复
可以使用随机数把,不过,如果用不好,只怕效率可能会很低!
不管怎么说,先帮你顶了!
srg777 2007-01-16
  • 打赏
  • 举报
回复
要求不能出现重复的数字

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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