Re: [問題] 產生N個不重複的數列
看板C_and_CPP (C/C++)作者stonehomelaa (清新、健康、專業)時間14年前 (2011/07/21 21:49)推噓0(0推 0噓 16→)留言16則, 5人參與討論串3/4 (看更多)
: for(g=1;g<=n;g++)
: {
: for(j=1;j<=n;j++)
: {
: temp = rand()%n+1; //一開始就隨機產生一個數字
: for(k=1;k<=n;k++)
: {
: if(temp == jtemp[k]) //根據temp的值一直去找相同的數值
: {
: j1 = temp;
: A1[j] = j1;
: jtemp[k] = 0; //另以找過的數字為0,為不找到重複的數值
: printf("%.f ",A1[j]);
: break;
: }
: }
: }
: }
這個要三層迴圈,其實有比較好的做法
推文也有寫到,類似洗牌的做法
想像一下有 N 張牌,依序標記 1 ~ N
每次隨便取一張出來,取後不放回
寫成程式大概像這樣
int A[] = {1, 2, 3, 4, 5, 6, 7};
for (i = N - 1; i > 0; i--)
{
rand_num = rand() % (i+1);
if (i == rand_num)
continue;
swap(A[i], A[rand_num]);
}
C++ 的話,有提供 shuffle 能一行搞定...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.32.213.253
→
07/22 00:28, , 1F
07/22 00:28, 1F
→
07/22 00:28, , 2F
07/22 00:28, 2F
→
07/22 00:43, , 3F
07/22 00:43, 3F
→
07/22 00:44, , 4F
07/22 00:44, 4F
→
07/22 00:46, , 5F
07/22 00:46, 5F
→
07/22 00:56, , 6F
07/22 00:56, 6F
→
07/22 01:31, , 7F
07/22 01:31, 7F
→
07/22 01:42, , 8F
07/22 01:42, 8F
→
07/22 01:42, , 9F
07/22 01:42, 9F
→
07/22 01:46, , 10F
07/22 01:46, 10F
→
07/22 05:28, , 11F
07/22 05:28, 11F
→
07/22 05:29, , 12F
07/22 05:29, 12F
→
07/22 05:31, , 13F
07/22 05:31, 13F
→
07/22 05:32, , 14F
07/22 05:32, 14F
→
07/23 19:26, , 15F
07/23 19:26, 15F
→
07/24 01:21, , 16F
07/24 01:21, 16F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章