英文看不懂。
|
|
用数组,显示 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; } |
|
谢谢~麻烦如何再分别用两个函数来分别确认一:没有重复数字。
二:确认每个数组都是包含有个数值。 |
|
另外我运行的时候会出现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”); } } |
|
这里只是用了一个二维数组, 函数传参的时候,相当于二级指针,你要是编译没过的话就把函数参数中arr[5][5] 改成int ** arr; 没学过就去学。 |