#29432: 全部變成+


110703046@g.nccu.edu.tw (hys)

學校 : 不指定學校
編號 : 178973
來源 : [118.150.147.45]
最後登入時間 :
2022-03-22 00:58:45
d626. 小畫家真好用 -- jack1 | From: [118.150.147.45] | 發表日期 : 2022-02-28 21:17

#include<stdio.h>

void paint(char p[100][100], int h, int k)

{

        if(p[h+1][k]=='-'){

                p[h+1][k]='+';

                paint(p, h+1, k);

        }

        if(p[h-1][k]=='-'){

                p[h-1][k]='+';

                paint(p, h-1, k);

        }

        if(p[h][k+1]=='-'){

                p[h][k+1]='+';

                paint(p, h, k+1);

        }

        if(p[h][k-1]=='-'){

                p[h][k-1]='+';

                paint(p, h, k-1);

        }

}

 

int main(void)

{

        int n;

        char p[100][100];

        scanf("%d", &n);

        for(int i=0; i<n; i++){

                for(int j=0; j<n; j++){

                        scanf("%c", &p[i][j]);

                }

        }

        int h, k;

        scanf("%d %d", &h, &k);

        p[h][k]='+';

        paint(p, h, k);

        for(int x=0; x<n; x++){

                for(int y=0; y<n; y++){

                        printf("%c", p[x][y]);

                }

                printf("\n");

        }

        return 0;

}

 

遞迴真的好難

想問為什麼會全部變成+ 感恩

 
#29434: Re:全部變成+


cges30901 (cges30901)

學校 : 不指定學校
編號 : 30877
來源 : [39.9.74.255]
最後登入時間 :
2024-10-14 22:20:08
d626. 小畫家真好用 -- jack1 | From: [27.247.66.76] | 發表日期 : 2022-03-01 06:36

#include

void paint(char p[100][100], int h, int k)

{

        if(p[h+1][k]=='-'){

                p[h+1][k]='+';

                paint(p, h+1, k);

        }

        if(p[h-1][k]=='-'){

                p[h-1][k]='+';

                paint(p, h-1, k);

        }

        if(p[h][k+1]=='-'){

                p[h][k+1]='+';

                paint(p, h, k+1);

        }

        if(p[h][k-1]=='-'){

                p[h][k-1]='+';

                paint(p, h, k-1);

        }

}

 

int main(void)

{

        int n;

        char p[100][100];

        scanf("%d", &n);

        for(int i=0; i<n; i++){

                for(int j=0; j<n; j++){

                        scanf("%c", &p[i][j]);

                }

        }

        int h, k;

        scanf("%d %d", &h, &k);

        p[h][k]='+';

        paint(p, h, k);

        for(int x=0; x<n; x++){

                for(int y=0; y<n; y++){

                        printf("%c", p[x][y]);

                }

                printf("\n");

        }

        return 0;

}

 

遞迴真的好難

想問為什麼會全部變成+ 感恩


因為你輸入的地方就錯了,輸入每一行的最後面有換行字元\n,在scanf("%c", &p[i][j])的時候會讀到換行字元

例如輸入範例測資你的程式的p會長這樣:

https://i.imgur.com/4PWb3Un.png

另外你的paint()函式有可能會存取到p範圍外的地方,會WA

 
ZeroJudge Forum