怎么实现1-100数字的随机排序?请高手帮忙

tOnghaO 2003-06-03 08:04:31
我希望1-100这些自然数随机排列 每次运行排列顺序都不一样 用c语言怎么实现 请高手帮忙 送分~~
...全文
1074 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
woshinzg 2003-06-07
  • 打赏
  • 举报
回复
大家好热心,好地方。


—————————————————————————————————
因为陌生,所以勇敢,因为距离,所以美丽。
QQ:6785267
snipersu 2003-06-07
  • 打赏
  • 举报
回复
#include <ctime>
#include <iostream>
using namespace std;
int main()
{
int a[100];
//初始化
for(int i=0;i<100;i++)
a[i]=i;
//种种子
srand( ( unsigned ) time( NULL ) );
//交换次数(随机的)
int cnt=rand()%101;

for(int j=0;j<cnt;j++)
{
for(int k=0;k<100;k++)
{
int temp=a[k];
//与谁交换(随机的)
int tpn=rand()%100;
a[k]=a[tpn];
a[tpn]=temp;
}
}
for(int l=0;l<100;l++)
{
if(l%10==0)
cout<<endl;
cout<<a[l]<<" ";
}

return 0;
}
晨星 2003-06-06
  • 打赏
  • 举报
回复
错了,错了,n等于0时i等于100,但循环已经结束了,^_^
晨星 2003-06-06
  • 打赏
  • 举报
回复
俺这里还有个比Cybergate() 笨的多的算法,不过挺好玩的,也把它写出来吧。^_^

1。做一个循环链表,链着1到100这100个数,初始化指针变量p,让它指向链表头。
2。初始化变量n=100 , i=0;(i一直等于100-n,用两个变量纯粹为了清晰)
3。产生一个1到n之间的随机数m;
4。从p的当前位置开始“报数”(即移动指针p),报到m后,把p所指向的结点所对应的数值赋给数组的第i个元素:array[i],并从循环链表上拆下p所代表的结点,而让p指向下一个结点;
5。n--,i++;
6.Goto第三步,接着往下做,直到n=0(此时i=99)。
moke33 2003-06-06
  • 打赏
  • 举报
回复
up
zhzc3911 2003-06-06
  • 打赏
  • 举报
回复
up
fangrk 2003-06-06
  • 打赏
  • 举报
回复
STL中间就有,可以参考一下Random_shuffle。
fangrk 2003-06-06
  • 打赏
  • 举报
回复
const int N = 8;
int A[] = {1, 2, 3, 4, 5, 6, 7, 8};
random_shuffle(A, A + N);
copy(A, A + N, ostream_iterator<int>(cout, " "));
// The printed result might be 7 1 6 3 2 5 4 8,
fmonkey 2003-06-06
  • 打赏
  • 举报
回复
up
NowCan 2003-06-06
  • 打赏
  • 举报
回复
理论上不可能每次都不一样啊。
bm1408 2003-06-05
  • 打赏
  • 举报
回复
up!
thrillers 2003-06-05
  • 打赏
  • 举报
回复
#include <iostream>
#include <ctime>

int main()
{
srand( ( unsigned ) time( NULL ) );
for ( int i = 0; i < 100; ++i )
{
std::cout << rand() % 100 << ' ';
}
return 0;
}
六月初六 2003-06-03
  • 打赏
  • 举报
回复
用链表是浪费空间
而且给自己找麻烦!
个人意见!
boyfling 2003-06-03
  • 打赏
  • 举报
回复
还可以利用链表进行随机插入。
HxySky 2003-06-03
  • 打赏
  • 举报
回复
听说这个帖子要结帐了//^_^
Javcy 2003-06-03
  • 打赏
  • 举报
回复
up
晨星 2003-06-03
  • 打赏
  • 举报
回复
点击右上方的“管理”。
tOnghaO 2003-06-03
  • 打赏
  • 举报
回复
谢谢 有点懂了~~
顺便问一个问题 怎么送分呀?
lifanxi 2003-06-03
  • 打赏
  • 举报
回复
呵呵,楼上的算法正确,前面回复的时候挣分心切,说的不太严密,不应该是"随机交换两个值",而是应该"从第一个起,随机的在后面选一个值与它交换,直到完成".
Cybergate 2003-06-03
  • 打赏
  • 举报
回复
sorry, a mistake

Define a[1..100]
for i←1 to n
do a[i]←i
for i←1 to n-1
do j←random(i+1,n) //Genereate a random integer in range [i+1, n]
swap (a[i], a[j])
加载更多回复(2)

69,371

社区成员

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

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