今天看C Primer Plus 第十二章,突然看到了随机函数srand()和rand()的介绍, 当时书上举了一个玩骰子的例子。。。。。
我突发奇想, 自己想出了一个算法题目、
题目如下:
输入一个数N
输出0~N直接的随机数字,并且报告各个数字出现了多少次、
报告数字的时候、 依次从小到大排序报告!
当N = q时退出循环
举例:
4
3 2 3 3
2 1
3 3
5
1 3 1 2 1
1 3
2 1
3 1
10
5 3 4 10 3 5 1 4 4 5
1 1
3 2
4 3
5 3
10 1
1
1
1 1
q
当时 我以为很简单。。。。 但是 事实我刚刚才完成、 一路上好多Bug 原谅我是算法渣渣..........
花了一个多小时、才做出来 我也不知道这个算法是不是早就有了 但是这个题目确实是我自己想出来的 如果有一样的、
原谅我把 我也不知道、、
我写的代码如下:
#include <stdio.h>
#include <stdlib.h>
void rand_1 (int arr[], int);
int main()
{
int i, j;
while (scanf("%d",&i) == 1)
{
int arr[i];
srand((unsigned)time(NULL));
for (j = 0; j < i; j++)
{
arr[j] = rand() % i + 1;
printf("%d ",arr[j]);
}
rand_1(arr, i);
}
return 0;
}
void rand_1 (int arr[], int len)
{
int i, j, k, x, m, t;
int s1[len];
int s2[len];
m = 0;
for (i = 0; i < len; i++)
{
for (j = i, k = i + 1; k < len; k++)
if (arr[j] > arr[k])
j = k;
if (j != i)
{
t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
}
for (i = 0, j = 0; i < len; i++)
{
if (i == len - 1)
{
if (arr[i] == arr[i - 1])
{
s1[j] = arr[i];
}
}
if (arr[i] != arr[i + 1])
{
s1[j] = arr[i];
j++;
}
}
printf("\n");
for (i = 0; i < j; i++)
s2[i] = 1;
i = 0;
for (x = i, k = i + 1;k < len; k++)
{
if (arr[x] == arr[k])
++s2[m];
if (arr[x] != arr[k])
{
x = k;
m++;
}
}
for (i = 0; i < j; i++)
{
printf("%d %d\n",s1[i], s2[i]);
}
return;
}
在Dev cpp上运行 通过!
记录一下、 2015年1月18日02:15:12 哈~ 晚安咯 睡觉~~~