#27963: 請問大家我這樣的寫法如何修改?


ic231542211 (willie)

學校 : 不指定學校
編號 : 44051
來源 : [123.194.107.200]
最後登入時間 :
2022-09-15 15:14:37
f313. 2. 人口遷移 -- 2020年10月APCS | From: [123.194.107.200] | 發表日期 : 2021-11-07 09:24

#include<stdio.h>

int main(){

    int R, C, k, m;

    scanf("%d %d %d %d", &R, &C, &k, &m);

    int city[52][52];

    int city_move[52][52];

    //將city[R][C]周圍以-1建立圍牆,避免遷移時出界

    for(int i = 0; i < R+1; i++){

        for(int j = 0; j < C+1; j++){

            city[i][j]= -1;

        }

    }

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

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

            scanf("%d", &city[i][j]);

        }

    }

    for(int day = 0; day < m; day++){//模擬m天後人口遷移分布

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

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

                city_move[i][j] = city[i][j];//將原陣列值帶入另一個陣列內

        }

    }

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

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

                if(city[i][j] == -1){

                    continue;

                }

                //上移

                if(city[i-1][j] >= 0){

                    city[i-1][j] = city[i-1][j] + city_move[i][j] / k;

                    city[i][j] = city[i][j] - city_move[i][j] / k;

                }

                //右移

                if(city[i][j+1] >= 0){

                    city[i][j+1] = city[i][j+1] + city_move[i][j] / k;

                    city[i][j] = city[i][j] - city_move[i][j] / k;

                }

                //下移

                if(city[i+1][j] >= 0){

                    city[i+1][j] = city[i+1][j] + city_move[i][j] / k;

                    city[i][j] = city[i][j] - city_move[i][j] / k;

                }

                //左移

                if(city[i][j-1] >= 0){

                    city[i][j-1] = city[i][j-1] + city_move[i][j] / k;

                    city[i][j] = city[i][j] - city_move[i][j] / k;

                }

            }

        }

    }

    //求人口最大值與人口最小值

    int minimum = -1, maximum = -1;

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

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

            if(city[i][j] >= 0){

                if(minimum < 0 || city[i][j] < minimum){

                    minimum = city[i][j];

                }

                if(maximum > 0 || city[i][j] > maximum){

                    maximum = city[i][j];

                }

            }

        }

    }

    printf("%d\n%d", minimum, maximum);

}

 

 

 
#27965: Re:請問大家我這樣的寫法如何修改?


cges30901 (cges30901)

學校 : 不指定學校
編號 : 30877
來源 : [39.15.1.195]
最後登入時間 :
2024-12-23 09:25:32
f313. 2. 人口遷移 -- 2020年10月APCS | From: [180.217.234.235] | 發表日期 : 2021-11-07 10:44

#include

int main(){

    int R, C, k, m;

    scanf("%d %d %d %d", &R, &C, &k, &m);

    int city[52][52];

    int city_move[52][52];

    //將city[R][C]周圍以-1建立圍牆,避免遷移時出界

    for(int i = 0; i < R+1; i++){

        for(int j = 0; j < C+1; j++){

            city[i][j]= -1;

        }

    }

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

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

            scanf("%d", &city[i][j]);

        }

    }

    for(int day = 0; day < m; day++){//模擬m天後人口遷移分布

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

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

                city_move[i][j] = city[i][j];//將原陣列值帶入另一個陣列內

        }

    }

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

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

                if(city[i][j] == -1){

                    continue;

                }

                //上移

                if(city[i-1][j] >= 0){

                    city[i-1][j] = city[i-1][j] + city_move[i][j] / k;

                    city[i][j] = city[i][j] - city_move[i][j] / k;

                }

                //右移

                if(city[i][j+1] >= 0){

                    city[i][j+1] = city[i][j+1] + city_move[i][j] / k;

                    city[i][j] = city[i][j] - city_move[i][j] / k;

                }

                //下移

                if(city[i+1][j] >= 0){

                    city[i+1][j] = city[i+1][j] + city_move[i][j] / k;

                    city[i][j] = city[i][j] - city_move[i][j] / k;

                }

                //左移

                if(city[i][j-1] >= 0){

                    city[i][j-1] = city[i][j-1] + city_move[i][j] / k;

                    city[i][j] = city[i][j] - city_move[i][j] / k;

                }

            }

        }

    }

    //求人口最大值與人口最小值

    int minimum = -1, maximum = -1;

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

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

            if(city[i][j] >= 0){

                if(minimum < 0 || city[i][j] < minimum){

                    minimum = city[i][j];

                }

                if(maximum > 0 || city[i][j] > maximum){

                    maximum = city[i][j];

                }

            }

        }

    }

    printf("%d\n%d", minimum, maximum);

}

 

 

看起來上移和左移的時候i-1或j-1可能會是負數?

 
ZeroJudge Forum