有两个函数原型的题目可任意实现一个
1.传入一个 n 在堆空间中产生 n*n 方格的棋盘
int ** createBoard(int n);
int createBoard1(int ***p,int n);
2.N 颗棋子随机落在棋盘上<需要防止落在同一位置>
int initBoard(int **p,int n);
3.打印棋盘
int printBoard(int **p,int n);
如果有两颗棋子落同一行或者同一列 输出好棋,否则 输出 不是好棋。
将棋局中的棋子打印出来 空位用 O 有旗子的用 X 表示
4.销毁棋盘
int destroyBoard(int **p,int n);
int destroyBoard1(int ***p,int n);
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <time.h> 4 int **createBoard(int n);//生成棋盘 5 void printBoard(int **board, int n);//打印棋盘 6 int initBoard(int **board, int n);//落子 7 int isGood(int **board, int n);//判断是否好棋 8 int destroyBoard(int **board, int n);//销毁棋盘 9 int main(void) 10 { 11 int **board=0; 12 int n=6; 13 board=createBoard(n); 14 printBoard(board, n); 15 printf("--------------------\n"); 16 initBoard(board, n); 17 printBoard(board, n); 18 19 if(isGood(board, n)) 20 printf("very good\n"); 21 else 22 printf("so low\n"); 23 printf("--------------------\n"); 24 destroyBoard(board, n); 25 printf("the board was destroyed\n"); 26 return 0; 27 } 28 //创建棋盘 29 int **createBoard(int n) 30 { 31 int **board=(int **)malloc(sizeof(int *)*n); 32 int i=0,j=0; 33 for(i=0;i<n;i++) 34 board[i]=(int *)malloc(sizeof(int)*n); 35 for(i=0;i<n;i++) 36 for(j=0;j<n;j++) 37 board[i][j]=0; 38 return board; 39 } 40 //打印棋盘 41 void printBoard(int **board, int n) 42 { 43 int i=0,j=0; 44 for(i=0;i<n;i++) 45 { 46 for(j=0;j<n;j++) 47 printf("%4d",board[i][j]); 48 printf("\n"); 49 } 50 } 51 //随机落子 52 int initBoard(int **board, int n) 53 { 54 int row=0,line=0; 55 srand(time(NULL)); 56 57 int i=0; 58 while(i<n) 59 { 60 row=rand()%n; 61 line=rand()%n; 62 63 if(board[row][line]==0)//若此处无子,则在此处落子 64 { 65 board[row][line]=1; 66 i++; 67 } 68 } 69 return i; 70 } 71 //判断是否有棋子在同行或者同列 72 int isGood(int **board, int n) 73 { 74 /* 75 将有子的坐标的横坐标还有纵坐标分别存入两个数组,最后再判断两个数组中有相同元素则是好棋 76 */ 77 int *row=(int *)calloc(n,sizeof(int)); 78 int *line=(int *)calloc(n,sizeof(int)); 79 int i=0,j=0; 80 int k=0; 81 for(i=0;i<n;i++) 82 for(j=0;j<n;j++) 83 { 84 if(board[i][j]==1){ 85 row[k]=i; 86 line[k]=j; 87 k++; 88 } 89 } 90 int flag=0; 91 for(i=0;i<k-1;i++) 92 for(j=i+1;j<k;j++) 93 { 94 if(row[i]==row[j]||line[i]==line[j]){ 95 flag=1; 96 return flag; 97 } 98 } 99 return flag; 100 } 101 //销毁棋盘 102 int destroyBoard(int **board, int n) 103 { 104 int i=0; 105 for(i=0;i<n;i++) 106 { 107 free(board[i]); 108 } 109 free(board); 110 return 0; 111 }
时间: 2024-10-08 11:12:59