求助关于bingo卡片的问题

C++语言 码拜 6年前 (2015-05-11) 358次浏览 0个评论
 

新手,刚学数组,需要至少4个函数求助关于bingo卡片的问题

英文看不懂。
用数组,显示 b i n g o下面显示   5行5列
随机的不重复的数字,要求b下面显示1-15,i下显示16-30,n下显示31-45,g下显示46-60,o下显示61-75
#include<stdio.h>
#include <time.h>

void getNum(int * arr, int len, int index)
{
	int min = 15 * (index - 1);
	int max = 15 * (index) + 1;
	int i = 0, j = 0;
	bool flag = false;
	while(1)
	{
		//生成数据
		flag =  false;
		for(i = 0; i < len; ++i)
		{
			int temp = 0;
			while( (temp = rand()%max) < min);
			arr[i] = temp;
		}

		//排重
		for(j = 0; j < len; ++j)
		{
			for(i = j + 1; i < len; ++i)
			{
				if(arr[i] == arr[j])
				{
					flag = true;
					break;
				}
			}
		}
		if(!flag)
			return;
	}
}

int main()
{
	char str[] = "bingo";
	int i, j;
	for(i = 0; i < 5; ++i)
	{
		printf("%4c", str[i]);
	}
	printf("\n");

	int arr[5][5] = {};
	int temp[5] = {};
	srand(time(0));
	bool flag = false;

	//得到数据
	for(i = 0; i < 5; ++i)
	{
		getNum(temp, 5, i + 1);
		for(j =0; j < 5; ++j)
		{
			arr[j][i] = temp[j];
		}
		memset(temp, 0 , 5);
	}

	//遍历数据
	for(i = 0; i < 5; ++i)
	{
		for(j =0; j < 5; ++j)
		{
			printf("%4d", arr[i][j]);
		}
		printf("\n");
	}
	getchar();
	return 0;
}
谢谢~麻烦如何再分别用两个函数来分别确认一:没有重复数字。
二:确认每个数组都是包含有个数值。

引用 3 楼 a30037338 的回复:
#include<stdio.h>
#include <time.h>

void getNum(int * arr, int len, int index)
{
	int min = 15 * (index - 1);
	int max = 15 * (index) + 1;
	int i = 0, j = 0;
	bool flag = false;
	while(1)
	{
		//生成数据
		flag =  false;
		for(i = 0; i < len; ++i)
		{
			int temp = 0;
			while( (temp = rand()%max) < min);
			arr[i] = temp;
		}

		//排重
		for(j = 0; j < len; ++j)
		{
			for(i = j + 1; i < len; ++i)
			{
				if(arr[i] == arr[j])
				{
					flag = true;
					break;
				}
			}
		}
		if(!flag)
			return;
	}
}

int main()
{
	char str[] = "bingo";
	int i, j;
	for(i = 0; i < 5; ++i)
	{
		printf("%4c", str[i]);
	}
	printf("\n");

	int arr[5][5] = {};
	int temp[5] = {};
	srand(time(0));
	bool flag = false;

	//得到数据
	for(i = 0; i < 5; ++i)
	{
		getNum(temp, 5, i + 1);
		for(j =0; j < 5; ++j)
		{
			arr[j][i] = temp[j];
		}
		memset(temp, 0 , 5);
	}

	//遍历数据
	for(i = 0; i < 5; ++i)
	{
		for(j =0; j < 5; ++j)
		{
			printf("%4d", arr[i][j]);
		}
		printf("\n");
	}
	getchar();
	return 0;
}
引用 3 楼 a30037338 的回复:
#include<stdio.h>
#include <time.h>

void getNum(int * arr, int len, int index)
{
	int min = 15 * (index - 1);
	int max = 15 * (index) + 1;
	int i = 0, j = 0;
	bool flag = false;
	while(1)
	{
		//生成数据
		flag =  false;
		for(i = 0; i < len; ++i)
		{
			int temp = 0;
			while( (temp = rand()%max) < min);
			arr[i] = temp;
		}

		//排重
		for(j = 0; j < len; ++j)
		{
			for(i = j + 1; i < len; ++i)
			{
				if(arr[i] == arr[j])
				{
					flag = true;
					break;
				}
			}
		}
		if(!flag)
			return;
	}
}

int main()
{
	char str[] = "bingo";
	int i, j;
	for(i = 0; i < 5; ++i)
	{
		printf("%4c", str[i]);
	}
	printf("\n");

	int arr[5][5] = {};
	int temp[5] = {};
	srand(time(0));
	bool flag = false;

	//得到数据
	for(i = 0; i < 5; ++i)
	{
		getNum(temp, 5, i + 1);
		for(j =0; j < 5; ++j)
		{
			arr[j][i] = temp[j];
		}
		memset(temp, 0 , 5);
	}

	//遍历数据
	for(i = 0; i < 5; ++i)
	{
		for(j =0; j < 5; ++j)
		{
			printf("%4d", arr[i][j]);
		}
		printf("\n");
	}
	getchar();
	return 0;
}
另外我运行的时候会出现0,是不是哪里需要加1?
100分
#include<stdio.h>
#include <time.h>

//判断有没有重复
int checkRepeat(int * arr, int len)
{
	int i = 0, j = 0;
	for(j = 0; j < len; ++j)
	{
		for(i = j + 1; i < len; ++i)
		{
			if(arr[i] == arr[j])
			{
				//有重复
				return -1;
			}
		}
	}
	//无重复
	return 0;
}

//得到数据
void getNum(int * arr, int len, int index)
{
	srand(time(0));
	int min = 15 * (index - 1);
	if(min == 0)
	{
		min = 1;
	}
	int max = 15 * (index) + 1;
	int i = 0, j = 0;
	bool flag = false;
	while(1)
	{
		//生成数据
		flag =  false;
		for(i = 0; i < len; ++i)
		{
			int temp = 0;
			while( (temp = rand()%max) < min);
			arr[i] = temp;
		}

		//排重
		if(checkRepeat(arr, len) == 0)
			return;
	}
}

//遍历二维数组, 判断是否有空
int checkEmpty(int arr[5][5], int len, int index)
{

	int i = 0, j = 0;
	//遍历数据
	for(i = 0; i < len; ++i)
	{
		for(j =0; j < index; ++j)
		{
			if( arr[i][j] == 0)
			{
				return -1;
			}
		}
	}
	return 0;
}

//遍历数组,打印数据
void Traversal(int arr[5][5], int index, int len)
{
	char str[] = "bingo";
	int i, j;
	for(i = 0; i < 5; ++i)
	{
		printf("%4c", str[i]);
	}
	printf("\n");

	//遍历数据
	for(i = 0; i < len; ++i)
	{
		for(j =0; j < index; ++j)
		{
			printf("%4d", arr[i][j]);
		}
		printf("\n");
	}
}

//给二维数组赋值
void getData(int arr[5][5], int index, int len)
{
	int i = 0, j = 0;
	int temp[5] = {};
	//得到数据
	for(i = 0; i < len; ++i)
	{
		getNum(temp, len, i + 1);
		for(j =0; j < index; ++j)
		{
			arr[j][i] = temp[j];
		}
		memset(temp, 0 , 5);
	}
}

int main(void)
{
	int arr[5][5] = {};


	getData(arr, 5, 5);
	if(checkEmpty(arr, 5, 5) == 0)
	{
		Traversal(arr, 5, 5);
	}
	else
	{
		printf("have empty data\n");
	}

	getchar();
	return 0;
}
这一步还没有学过~能否用别的替代或者写成简单的?因为我刚学c++。void Traversal(int arr[5][5], int index, int len)
{
    char str[] = “bingo”;
    int i, j;
    for(i = 0; i < 5; ++i)
    {
        printf(“%4c”, str[i]);
    }
    printf(“\n”);
 
    //遍历数据
    for(i = 0; i < len; ++i)
    {
        for(j =0; j < index; ++j)
        {
            printf(“%4d”, arr[i][j]);
        }
        printf(“\n”);
    }
}

引用 6 楼 a30037338 的回复:
#include<stdio.h>
#include <time.h>

//判断有没有重复
int checkRepeat(int * arr, int len)
{
	int i = 0, j = 0;
	for(j = 0; j < len; ++j)
	{
		for(i = j + 1; i < len; ++i)
		{
			if(arr[i] == arr[j])
			{
				//有重复
				return -1;
			}
		}
	}
	//无重复
	return 0;
}

//得到数据
void getNum(int * arr, int len, int index)
{
	srand(time(0));
	int min = 15 * (index - 1);
	if(min == 0)
	{
		min = 1;
	}
	int max = 15 * (index) + 1;
	int i = 0, j = 0;
	bool flag = false;
	while(1)
	{
		//生成数据
		flag =  false;
		for(i = 0; i < len; ++i)
		{
			int temp = 0;
			while( (temp = rand()%max) < min);
			arr[i] = temp;
		}

		//排重
		if(checkRepeat(arr, len) == 0)
			return;
	}
}

//遍历二维数组, 判断是否有空
int checkEmpty(int arr[5][5], int len, int index)
{

	int i = 0, j = 0;
	//遍历数据
	for(i = 0; i < len; ++i)
	{
		for(j =0; j < index; ++j)
		{
			if( arr[i][j] == 0)
			{
				return -1;
			}
		}
	}
	return 0;
}

//遍历数组,打印数据
void Traversal(int arr[5][5], int index, int len)
{
	char str[] = "bingo";
	int i, j;
	for(i = 0; i < 5; ++i)
	{
		printf("%4c", str[i]);
	}
	printf("\n");

	//遍历数据
	for(i = 0; i < len; ++i)
	{
		for(j =0; j < index; ++j)
		{
			printf("%4d", arr[i][j]);
		}
		printf("\n");
	}
}

//给二维数组赋值
void getData(int arr[5][5], int index, int len)
{
	int i = 0, j = 0;
	int temp[5] = {};
	//得到数据
	for(i = 0; i < len; ++i)
	{
		getNum(temp, len, i + 1);
		for(j =0; j < index; ++j)
		{
			arr[j][i] = temp[j];
		}
		memset(temp, 0 , 5);
	}
}

int main(void)
{
	int arr[5][5] = {};


	getData(arr, 5, 5);
	if(checkEmpty(arr, 5, 5) == 0)
	{
		Traversal(arr, 5, 5);
	}
	else
	{
		printf("have empty data\n");
	}

	getchar();
	return 0;
}
引用 7 楼 yandeming 的回复:

这一步还没有学过~能否用别的替代或者写成简单的?因为我刚学c++。
void Traversal(int arr[5][5], int index, int len)

这里只是用了一个二维数组, 函数传参的时候,相当于二级指针,你要是编译没过的话就把函数参数中arr[5][5] 改成int ** arr;

没学过就去学。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明求助关于bingo卡片的问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!