#ifndef _GAME_H_
#define _GAME_H_
#define ROW 9
#define COL 9
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void title();
void upd_bd(char arr[ROW][COL]);
void init(char arr[ROW][COL]);//初始化棋盘or清空棋盘
void display(char arr[ROW][COL]);//打印棋盘
#endif
void title()
{
printf("*********** 数独游戏 **********\n");
}
void display(char arr[ROW][COL]) //打印棋盘
{
int row = 1;
printf(" ");
for (int k = 1; k <= COL; k++)
{
printf(" %d ", k);
if (k == COL)
printf("\n");
}
for (int l = 0; l <= COL; l++)
{
printf(" ");
if (l == COL)
printf("\n");
}
for (int i = 0; i < ROW; i++)
{
for (int j = 0; j < COL; j++)
{
if (i > 0 && j == 0)
{
printf(" ");
for (int k = 0; k < COL; k++)
{
if (k > 0)
printf("|");
printf("---");
}
printf("\n");
}
if (j == 0)
printf("%d ", row++);
if (j > 0)
printf("|");
printf(" %c ", arr[i][j]);
if (j == COL - 1)
printf("\n");
}
}
}
void init(char arr[ROW][COL])//初始化棋盘or清空棋盘
{
for (int i = 0; i < ROW; i++)
{
for (int j = 0; j < COL; j++)
arr[i][j] = ' ';
}
}
void upd_bd(char arr[ROW][COL])//生成9X9棋盘
{
srand(time(0));
char element[10] = { '1','2','3','4','5','6','7','8','9','\0' };
int row, col, count = 0;
int num, count_r = 0, count_c = 0;
int Flag_r = 0, Flag_c = 0;
while (1)
{
count_r = 0, count_c = 0;
Flag_r = 0, Flag_c = 0;
do { //循环直到随机出一个满足条件的坐标
row = rand() % 9;
col = rand() % 9;
for (int i = 0; i < ROW; i++)
{
if (arr[i][col] != ' ')
count_c++; //记录坐标所在列被赋值元素个数
}
for (int j = 0; j < COL; j++)
{
if (arr[row][j] != ' ')
count_r++; //记录坐标所在行被赋值元素个数
}
} while (arr[row][col] != ' ' || count_r == 2 || count_c == 2);//当该坐标值不为0或坐标所在行列有数值位数量达到2,不满足条件,继续循环
do { //坐标确定,循环直到随机出一个满足条件的数值填入坐标
num = rand() % 9; //数字1-9对应的ASCLL表值
for (int i = 0; i < ROW; i++)
{
if (arr[i][col] == element[num])
Flag_c = 1; //坐标对应列整列有相同值,Flag_c赋值为1
}
for (int j = 0; j < COL; j++)
{
if (arr[row][j] == element[num])
Flag_r = 1; //坐标对应行整行有相同值,Flag_r赋值为1
}
} while (Flag_r == 1 || Flag_c == 1);//行或列中有相同值则继续循环
arr[row][col] = element[num];
count++;
if (count == 9)//9(可按游戏规则难度等设置)个位置被复制后,九宫格生成完毕,结束循环
break;
}
}
int main()
{
char board[ROW][COL];
init(board);
display(board);
upd_bd(board);
display(board);
return 0;
}
代码里面有死循环,下面这两个flag只要有一次变成1,就永远在这个红框里面循环了
编译器没报错啊,而且你的Board都没用啊
你的board数组都没有赋值啊!
不知道你这个问题是否已经解决, 如果还没有解决的话:平台会对你编写的代码进行测试: 输入: 输入排好序的字符串1 abcdefg 输入排好序的字符串2 1234567 输出: 1234567abcdefg
#include<stdio.h>
#include<string.h>
#define SIZE 100
void resort(char *a)
{
int i=0,j=0;
int len=strlen(a);
char temp;
for(i=0;i<len-1;i++)
{
for(j=0;j<len-1-i;j++)
{
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
int main()
{
char arr1[SIZE];
char arr2[SIZE];
int n;
puts("输入排好序的字符串1");
gets(arr1);
puts("输入排好序的字符串2");
gets(arr2);
n=strcmp(arr1,arr2);
if(n<0)
{
strcat(arr1,arr2);
resort(arr1);
puts(arr1);
}
else
{
strcat(arr2,arr1);
resort(arr2);
puts(arr2);
}
return 0;
}
问题分析: 根据给出的参考资料和问题描述,我们可以分析出以下问题: 1. 代码中使用了gets()函数进行输入,但这个函数在C11中被弃用,在C14中被移除。应该使用更安全的fgets()函数进行输入。 2. 代码中计算出现次数最多的整数及其出现次数,但只输出了其中一个整数和次数,没有输出其他整数的出现次数。
解决方案: 根据问题分析,我们可以采取以下步骤来解决问题:
步骤1: 修改输入部分 将代码中使用的gets()函数改为fgets()函数进行输入,并对输入进行处理,列出需要输入的整数的个数和整数本身。 代码示例:
#include <stdio.h>
void fun(char *str) {
// 获取输入的整数个数
int n;
sscanf(str, "%d", &n);
// 打印整数个数用于测试
printf("n = %d\n", n);
// 获取整数并打印
int nums[n];
for (int i = 0; i < n; i++) {
sscanf(str + 3 + 2 * i, "%d", &nums[i]);
printf("nums[%d] = %d\n", i, nums[i]);
}
}
int main() {
char str[100];
fgets(str, sizeof(str), stdin);
fun(str);
return 0;
}
步骤2: 修改计算出现次数最多的整数部分 根据题目要求,我们需要计算出现次数最多的整数及其出现的次数,并按整数升序输出。修改代码,使用一个数组来统计每个整数出现的次数,再遍历数组找到出现次数最多的整数,并打印出相应的次数。 代码示例:
#include <stdio.h>
void fun(char *str) {
int n;
sscanf(str, "%d", &n);
int nums[n];
for (int i = 0; i < n; i++) {
sscanf(str + 3 + 2 * i, "%d", &nums[i]);
}
// 统计每个整数出现的次数
int count[n];
for (int i = 0; i < n; i++) {
// 初始化次数为0
count[i] = 0;
for (int j = 0; j < n; j++) {
if (nums[j] == nums[i]) {
count[i]++;
}
}
}
// 找到出现次数最多的整数
int maxCount = 0;
for (int i = 1; i < n; i++) {
if (count[i] > count[maxCount]) {
maxCount = i;
}
}
// 打印出现次数最多的整数及其出现次数
for (int i = 0; i < n; i++) {
if (count[i] == count[maxCount]) {
printf("%d %d\n", nums[i], count[i]);
}
}
}
int main() {
char str[100];
fgets(str, sizeof(str), stdin);
fun(str);
return 0;
}
以上代码中,我们使用一个数组count[]
来存储每个整数出现的次数,然后找到出现次数最多的整数并记录索引maxCount
,最后再遍历数组找到所有出现次数等于最大次数的整数并打印出来。
通过以上两个步骤的修改,可以解决问题。
注意事项: - 为了保证程序的安全性,应该根据输入字符串的长度进行越界检查,避免数组溢出。 - 在解决问题的过程中,要充分理解题目要求和给出的代码,避免思路上的偏差和操作上的错误。