whyyouhitme_ 2018-03-04 14:03 采纳率: 57.1%
浏览 1313
已采纳

10*10字符数组(元素都是'.')作为棋盘,要求写出随机步,从随机的一点开始,随机向上下左右走

走过的元素,用大写英文字母A-Z按顺序代替,运行出来乱七八糟的,斜着走,还跳2步。觉得自己写的很冗长,还没实现功能。图片说明
#include
#include
#include
#define RAW 10
#define COL 10
#define DIREC 4

int main(void)
{
char Checkerboard[RAW][COL],Letter[26];
int i=0,j=0,direction,k=1;
for(i=0;i<RAW;i++){
for(j=0;j<COL;j++)
Checkerboard[i][j]='.';
}
Letter[0]='A';
for(i=1;i<26;i++)
Letter[i]=Letter[i-1]+1;//26字母存入数组

srand((unsigned)time(NULL));
    i=rand()%RAW;//余数0,1,2,3.....9
    j=rand()%COL;//余数0,1,2,3.....9
    Checkerboard[i][j]=Letter[0];//确定棋盘上第一个字母A的位置

    while(Checkerboard[i+1][j]=='.'||Checkerboard[i-1][j]=='.'||Checkerboard[i][j+1]=='.' ||Checkerboard[i][j-1]=='.'){

        direction=rand() % DIREC;//余数0,1,2,3代表方向
        switch(direction){
        case 0:
            i--;//上移
            if((i<10 && i>=0) && Checkerboard[i][j]=='.' ){
                 Checkerboard[i][j]=Letter[k];
                 k++;
                 break;
            }
                 else
                 break;
        case 1:
            i++;//下移
            if((i<10 && i>=0) && Checkerboard[i][j]=='.' ){
                 Checkerboard[i][j]=Letter[k];
                 k++;
                 break;
            }
                 else
                 break;
        case 2:
            j--;//左移
            if((j<10 && j>=0) && Checkerboard[i][j]=='.' ){
                 Checkerboard[i][j]=Letter[k];
                 k++;
                 break;
            }
                 else
            break;
        case 3:
            j++;//右移
            if((j<10 && j>=0) && Checkerboard[i][j]=='.' ){
                 Checkerboard[i][j]=Letter[k];
                 k++;
                 break;
            }
                 else
                break;
        }
    }
    for(i=0;i<RAW;i++){
       for(j=0;j<COL;j++)
        printf(" %c",Checkerboard[i][j]);
    printf("\n");
    }
return 0;

}

  • 写回答

14条回答 默认 最新

  • yhll2333 2018-03-06 12:42
    关注

    再看一下这个

     #include <stdio.h>
    #include<stdlib.h>
    #include <time.h>
    
    #define RAW 10
    #define COL 10
    #define DIREC 4
    
    int main(void) {
        char Checkerboard[RAW][COL], Letter[26];
        int i = 0, j = 0, direction, k = 0;
        for (i = 0; i < RAW; i++) {
            for (j = 0; j < COL; j++)
                Checkerboard[i][j] = '.';
        }
    //    Letter[0] = 'A';
        for (i = 0; i < 26; i++)
            Letter[i] = 'A' + i;
    
        srand((unsigned) time(NULL));
        i = rand() % RAW;//余数0,1,2,3.....9
        j = rand() % COL;//余数0,1,2,3.....9
        Checkerboard[i][j] = Letter[0];//确定棋盘上第一个字母A的位置
        k = 1;
        while (k < 26) {
            if (!((i < RAW - 1 && Checkerboard[i + 1][j] == '.') ||
                  (i > 0 && Checkerboard[i - 1][j] == '.') ||
                  (j < COL - 1 && Checkerboard[i][j + 1] == '.') ||
                  (j > 0 && Checkerboard[i][j - 1] == '.'))) {
                //上下左右没有能走的了,就结束while循环
                break;
            }
            direction = rand() % DIREC;//余数0,1,2,3代表方向
            switch (direction) {
                case 0:
                    if (i > 0 && Checkerboard[i - 1][j] == '.') {
                        Checkerboard[i - 1][j] = Letter[k];
                        k++;
                        i--;//上移
                    }
                    break;
                case 1:
                    if (i < RAW - 1 && Checkerboard[i + 1][j] == '.') {
                        Checkerboard[i + 1][j] = Letter[k];
                        k++;
                        i++;//下移
                    }
                    break;
                case 2:
                    if (j > 0 && Checkerboard[i][j - 1] == '.') {
                        Checkerboard[i][j - 1] = Letter[k];
                        k++;
                        j--;//左移
                    }
                    break;
                case 3:
                    if (j < COL - 1 && Checkerboard[i][j + 1] == '.') {
                        Checkerboard[i][j + 1] = Letter[k];
                        k++;
                        j++;//右移
                    }
                    break;
            }
        }
        for (i = 0; i < RAW; i++) {
            for (j = 0; j < COL; j++)
                printf(" %c", Checkerboard[i][j]);
            printf("\n");
        }
        return 0;
    } 
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(13条)

报告相同问题?

悬赏问题

  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题