You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无数组实现棋盘随机位置打印字符'C'的C语言问题

实现随机位置打印'C'(无数组版)

问题背景

现有如下C语言代码,输出一个由| 组成的类棋盘结构:

#include<stdio.h>

int main(){
    int size;
    int i ;
    int k;

    printf("room size : ");
    scanf("%d",&size);

    for(k=2; k<=size; k++) {
        for(i=0; i<=size; i++) {
            printf("| ");
        }
        printf("\n");
    }

    for(i=0; i<=size; i++) {
        printf("| ");
    }
}

输入5时的输出:

room size : 5
| | | | | | 
| | | | | | 
| | | | | | 
| | | | | | 
| | | | | | 

需求:不使用数组,随机选择一个方格打印字符C,预期输出示例(随机坐标对应第4行第4列):

room size : 5
| | | | | | 
| | | | | | 
| | | | | | 
| | |C| | | 
| | | | | | 

解决方案

核心思路是先生成随机的行/列坐标,再在打印每个位置时判断是否命中该坐标,无需数组存储数据。具体实现步骤:

  1. 添加随机数依赖:引入<stdlib.h>和<time.h>头文件,用于生成不重复的随机数。
  2. 生成随机坐标:用当前时间初始化随机种子,再生成匹配棋盘范围的行号和列号。
  3. 修改打印逻辑:打印每个位置时,判断当前行/列是否等于随机坐标,命中则打印|C,否则打印| 。

修改后的完整代码:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int main(){
    int size;
    int i, k;
    int rand_row, rand_col;

    printf("room size : ");
    scanf("%d",&size);

    // 初始化随机种子,保证每次运行随机结果不同
    srand(time(NULL));
    // 生成1~size的随机行号(对应棋盘的size行)
    rand_row = rand() % size + 1;
    // 生成0~size的随机列号(对应每行的size+1个位置)
    rand_col = rand() % (size + 1);

    // 循环打印size行,替代原代码的分段循环
    for(k=1; k<=size; k++) {
        for(i=0; i<=size; i++) {
            if(k == rand_row && i == rand_col) {
                printf("|C");
            } else {
                printf("| ");
            }
        }
        printf("\n");
    }
    return 0;
}

代码说明

  • srand(time(NULL)):用系统当前时间作为随机种子,避免每次运行随机结果重复。
  • rand_row = rand() % size + 1:生成1到size的整数,对应棋盘的行号(原代码最终输出size行)。
  • rand_col = rand() % (size + 1):生成0到size的整数,对应每行的size+1个|位置。
  • 合并原代码的两个打印循环,统一处理每行的打印判断,逻辑更简洁。

内容的提问来源于stack exchange,提问作者Player1 ready

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 19:33:10