琐记6:随机分组

xiaoxiao2021-02-28  101

将40个数按4个一组随机分成10组打印出来:

实现的方法应该有很多,这里就介绍一种利用数组元素的交换来实现的方法。可以利用一个随机函数获取一个40以内的随机数作为下标,将它的值与末尾值交换,再获取一个39以内的随机数,再将它的值与倒数第二个数交换,依次交换后就可以得到一个随机数组了。

#include <time.h> #include <stdio.h> #include <string.h> #define LEN 40 void swap(int *a, int i, int j) { int tmp = a[i]; a[i] = a[j]; a[j] = tmp; } void printA(int *a, int len) { int i; for (i = 0; i < len; i++) { if (i % 4 == 0) printf ("\n"); printf ("M ",a[i]); } printf ("\n"); } int main1() { srand((unsigned int)time(NULL)); int name[LEN] = {0}; int i = 0; for (i = 0; i < LEN; i++) { name[i] = i+1; } for (i = LEN-1; i >= 0; i--) { int index = rand()%(LEN); // 获取一个i以内的随机下标 swap(name, index, i); // 交换该下标与末尾的值 } printA (name,LEN); return 0; }

这里如果是一个随机的字符串数组就很难交换了,但,我们可以简化的思路,不用交换,直接使用 strcpy 函数进行字符串的赋值:

int main() { srand((unsigned int)time(NULL)); char name[][6] = { "张1","张2","张3","张4", "张5","张6","张7","张8","张9","张10", "张11","张12","张13","张14","张15","张16","张17","张18","张19","张20", "张21","张22","张23","张24","张25","张26","张27","张28","张29","张30", "张31","张32","张33","张34","张35","张36","张37","张38","张39","张40" }; int i; for (i = LEN-1; i > 0; i--) { int index = rand()%(i); printf ("%-8s ",name[index]); strcpy (name[index], name[i]); if (i % 4 == 0) printf ("\n"); } printf ("%s",name[0]); putchar ('\n'); return 0; }

转载请注明原文地址: https://www.6miu.com/read-61100.html

最新回复(0)