抓破头皮都想不通,程序错在哪儿了!(随机数问题)

ztwz 2004-10-16 12:10:24
这是一个产生随机数的程序,sizes大小为100,我想产生1-150之间的无从复随机数,但怎么死活都有从复的数,我不知道错在哪儿了!请大虾们帮我看看!谢谢
void rndrang(int n[],int sizes)
{
int j,k,temp,i=0;
srand(time(NULL)); //用时间做种子
n[sizes]=0;
while(i<sizes)
{
k=rand()%150+1; //产生一个随机数
for(j=0;j<=i;j++)//与前面的数比较是否有相同的!
{
if(k!=n[j])
{
n[i]=k;+
i++;
break;
}
}
}
}
...全文
193 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
双杯献酒 2004-10-16
  • 打赏
  • 举报
回复
运行结果;
70 104 11 123 146 148 108 136 118 10

134 52 145 122 62 55 33 113 53 111

127 124 5 95 25 6 28 30 112 76

114 92 137 23 4 20 78 43 42 18

15 34 125 84 16 119 116 71 133 94

21 61 64 129 59 79 109 65 107 13

139 126 131 142 32 85 98 29 87 141

39 80 12 66 57 132 88 40 90 130

74 47 2 138 69 100 81 56 41 105

67 91 17 120 37 44 82 147 3 9

请按任意键继续 . . .
双杯献酒 2004-10-16
  • 打赏
  • 举报
回复
// Dev C++ 4.9.8.0
#include <iostream>
#include <cstdlib>
#include <cstdio>

using namespace std;

void rndrang(int n[],int sizes);
int main(int argc, char *argv[])
{
const int sizes = 100;
int n[sizes] = {0};

rndrang(n,sizes);
// 显示
for(int i=0;i<sizes;i++)
{
cout << n[i] << "\t";
if(i%10 == 9) cout << endl;
}

system("PAUSE");
return 0;
}

void rndrang(int n[],int sizes)
{
int j,k,temp,i=0;
srand(time(NULL)); //用时间做种子
//n[sizes]=0; // 越界!!
while(i<sizes)
{
k=rand()%150+1; //产生一个随机数
bool bSame = false;
for(j=0;j<i;j++)//与前面的数比较是否有相同的!
{
if(k ==n[j])
{
bSame = true;
break;
}
}
if(!bSame)
{
n[i] = k;
i++;
}
}
}
WuYL7812 2004-10-16
  • 打赏
  • 举报
回复
不好意思,没看清楚。
WuYL7812 2004-10-16
  • 打赏
  • 举报
回复
先调用
srand(unsigned int)
比如
srand(time(0));
time(0)求当前时间,保证每次调用都是不一样的种子
yujinchi 2004-10-16
  • 打赏
  • 举报
回复
不行吧,if "error"
update : {if(k==n[j])
break;
else {n[i]=k;break;}
}
i++;
}
大熊猫侯佩 2004-10-16
  • 打赏
  • 举报
回复
你没有初始化随机数种子
yangfasheng 2004-10-16
  • 打赏
  • 举报
回复
if(k!=n[j])
{
n[i]=k;+
i++;
break;
}
这一段有问题,
改啦一下,在我机子上运行正常:VC++6。0
#include "stdafx.h"
#include <stdlib.h>
#include <iostream.h>
#include <string.h>
#include <time.h>
//using namespace std;

void rndrang(int n[],int sizes);


int main(int argc,char *argv[])
{
const int sizes = 10;
int n[sizes] = {0};

memset(n,0,sizes);

rndrang(n,sizes);
// 显示
for(int i=0;i<sizes;i++)
{
cout << n[i] << "\t";
if(i%10 == 9) cout << endl;
}

return 0;
}

void rndrang(int n[],int sizes)
{
int j,k,i=0;
srand(time(NULL)); //用时间做种子
memset(n,0,sizes);
while(i<sizes)
{
k=rand()%150+1; //产生一个随机数
for(j=0;j<i;j++)//与前面的数比较是否有相同的!
{
if(k!=n[j])
{
n[i]=k;
}
else
break;
}
if(j<i)//如果前面的数组元素中已经有相同的数,则重新产生一个随机数.
i--;
i++;
}
}
内容概要:本文提出了一种基于粒子群优化算法(PSO)的配电网光伏储能双层优化配置模型,以IEEE33节点系统为研究对象,开展分布式能源的选址定容优化研究。该模型构建了上层规划与下层运行协同的双层优化框架:上层以最小化投资成本、网损成本、购电成本及电压偏差为目标,优化光伏和储能的选址与定容方案;下层则以日运行经济性最优为目标,优化储能充放电策略及网络拓扑结构。通过Matlab编程实现粒子群算法对该双层模型的求解,完成了从模型构建、算法设计到仿真实现的完整流程,实现了对配电网中光伏与储能系统的科学规划与经济运行的联合优化。; 适合人群:具备电力系统分析基础、熟悉Matlab编程工具,从事新能源接入、配电网络优化、智能优化算法应用等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:① 掌握双层优化模型在电力系统规划中的建模方法与求解思路;② 学习粒子群算法在复杂非线性工程问题中的实际应用技巧;③ 实现光伏与储能系统的协同选址定容,提升配电网的运行经济性、电压质量与新能源消纳能力; 阅读建议:建议结合IEEE33节点标准测试系统数据进行代码复现,深入理解上下层模型之间的迭代交互机制,并尝试引入其他智能优化算法(如GWO、WOA等)进行对比分析,以全面评估算法性能与优化效果。

70,038

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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