1.定義一個一維數,數組大小為24。
2.產生0~23的隨機數。
3.將產生的隨機數存入i數組,要求數組中的每個數據不能相同。
4.補充說明,這個子程序要求每次調用後,這個數組裡面就 存放了0~23這些數據,而且這些數據沒有重復的。
5.注意,C語言有隨機數函數,可以用函數產生隨機數。RAND(N)
#include <stdio.h>
#include <time.h>
#define ArrayMaxItem 24
int RandTest()
{
int i = 0;
int ret = 0;
time_t t;
for (i=0; i<10; i++)
{
srand((unsigned) time(&t)*10);
ret = rand();
//ret = rand((unsigned) time(&t));
printf("ret:%d\n", ret);
}
return 0;
}
int RandArray(int *a, int n)
{
int i = 0;
int t = 0;
time_t mytime;
struct tm *timeinfo;
for (i=0; i<n ;i++)
a[i] = 0;
/*only n-1 posions need to by seted*/
for (i=0; i<n-1; i++)
{
while(a[t=rand((unsigned)time(&mytime))%n] != 0);
a[t] = n-i-1;
timeinfo = localtime(&mytime);
printf("time:%s a[%d]:%d\n", asctime(timeinfo), t, a[t]);
}
for (i=0; i<n; i++)
{
printf("a[%d]:%d\n", i, a[i]);
}
return 0;
}
int main()
{
int a[ArrayMaxItem];
RandArray(a, ArrayMaxItem);
//RandTest();
return 0;
}
1.隨機數的使用過程:
網上說要先調用srand(unsigned seed)函數設置隨機數種子,再調用rand(void)產生隨機數,但我用系統時間來作為種子,產生了十次隨機數值都是一樣的。
之後采用上面代碼所用的方法,直接將種子傳入rand()函數中,調用十次產生不同的值,但每次調用產生的值是同一組。
2.獲得系統時間:
#include <stdio.h>
#include <time.h>
int main()
{
time_t rawtime;
struct tm * timeinfo;
time ( &rawtime );
timeinfo = localtime ( &rawtime );
printf ( "The current date/time is: %s", asctime (timeinfo) );
return 0;
}
time_t // 時間類型(time.h 定義)
struct tm { // 時間結構,time.h 定義如下:
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst;
}
time ( &rawtime ); // 獲取時間,以秒計,從1970年1月一日起算,存於rawtime
localtime ( &rawtime ); //轉為當地時間,tm 時間結構
asctime() // 轉為標准ASCII時間格式:
//就是直接打印tm,tm_year 從1900年計算,所以要加1900,月tm_mon,從0計算,所以要加1
3.思路:
用隨機數產生0~n-1范圍內的數組下標,當對應的數不為0,則置為n-i-1,這樣,只需要置n-1個,最後一個本來就是0。
產生0~n-1范圍內的隨機數的方法是對rand()產生出來的隨機數對n取余。
4.運行結果:
time:Tue Apr 19 12:28:42 2016
a[7]:23
time:Tue Apr 19 12:28:42 2016
a[22]:22
time:Tue Apr 19 12:28:42 2016
a[9]:21
time:Tue Apr 19 12:28:42 2016
a[19]:20
time:Tue Apr 19 12:28:42 2016
a[17]:19
time:Tue Apr 19 12:28:42 2016
a[10]:18
time:Tue Apr 19 12:28:42 2016
a[12]:17
time:Tue Apr 19 12:28:42 2016
a[13]:16
time:Tue Apr 19 12:28:42 2016
a[2]:15
time:Tue Apr 19 12:28:42 2016
a[11]:14
time:Tue Apr 19 12:28:42 2016
a[18]:13
time:Tue Apr 19 12:28:42 2016
a[4]:12
time:Tue Apr 19 12:28:42 2016
a[16]:11
time:Tue Apr 19 12:28:42 2016
a[8]:10
time:Tue Apr 19 12:28:42 2016
a[15]:9
time:Tue Apr 19 12:28:42 2016
a[21]:8
time:Tue Apr 19 12:28:42 2016
a[14]:7
time:Tue Apr 19 12:28:42 2016
a[6]:6
time:Tue Apr 19 12:28:42 2016
a[5]:5
time:Tue Apr 19 12:28:42 2016
a[1]:4
time:Tue Apr 19 12:28:42 2016
a[23]:3
time:Tue Apr 19 12:28:42 2016
a[20]:2
time:Tue Apr 19 12:28:42 2016
a[3]:1
a[0]:0
a[1]:4
a[2]:15
a[3]:1
a[4]:12
a[5]:5
a[6]:6
a[7]:23
a[8]:10
a[9]:21
a[10]:18
a[11]:14
a[12]:17
a[13]:16
a[14]:7
a[15]:9
a[16]:11
a[17]:19
a[18]:13
a[19]:20
a[20]:2
a[21]:8
a[22]:22
a[23]:3