生成连连看地图(难度:1颗星)

来源:互联网 发布:淘宝的工具吧在哪里 编辑:程序博客网 时间:2024/05/22 13:14

问题描述:

输入m和n(保证m*n是偶数),生成一个m*n的二维矩阵,其中用数字1-5来表示不同的图案,需要满足每一个数字在矩阵中出现的次数为偶数,并且是随机的。

问题分析:

  1. 为了要保证每个数字都是随机的,肯定要用到srand函数
  2. 为了要每个数字在矩阵中出现的次数是偶数,并且要控制进行的次数,最后是先产生矩阵个数的一半,然后另外一个复制前面一半的值,这样就可以保证偶数的条件
  3. 在做完第二步之后,我们需要进行若干次数据交换的操作,为了把数组元素打乱,看起来是一个随机的矩阵

参考代码:

#include <stdio.h>#include <stdlib.h>#include <time.h>void MySwap(int* pNum1, int* pNum2){    if (NULL == pNum1 || NULL == pNum2)        return;    int nTemp = *pNum1;    *pNum1 = *pNum2;    *pNum2 = nTemp;}int main(){    srand((unsigned int)time(NULL));    int m, n, i, j, index1, index2;    printf("输入宽和高,并保证宽和高之积为偶数\n");    scanf_s("%d%d", &m, &n);    if ((m * n) % 2)    {        printf("宽和高的积不能为奇数\n");        return 0;    }    int *pTemp = (int*)malloc(m * n * sizeof(int));    for (i = 0; i < m * n / 2; i++)        pTemp[i] = pTemp[i + m * n / 2] = rand() % 5 + 1;//在1-5中随机分配数组    for (int i = 0; i < 100; i++)//进行100次随机打乱    {        index1 = rand() % (m * n);        index2 = rand() % (m * n);        MySwap(&pTemp[index1], &pTemp[index2]);//随机产生两个下标并交换    }    int **ppArray = (int**)malloc(m * sizeof(int*));    for (i = 0; i < m; i++)        ppArray[i] = pTemp + i * n;    for (i = 0; i < m; i++)    {        for (j = 0; j < n; j++)            printf("%d ", ppArray[i][j]);        printf("\n");    }    free(pTemp);    free(ppArray);    return 0;}

运行结果:

这里写图片描述

原创粉丝点击