#28092: 請問我要如何修改才能讓座標值依照英文字母大小輸出?


ic231542211 (willie)

學校 : 不指定學校
編號 : 44051
來源 : [123.194.107.200]
最後登入時間 :
2022-09-15 15:14:37
f148. 2. 定向越野 (Orienteering) -- 2020年6月TOI練習賽新手組 | From: [123.194.107.200] | 發表日期 : 2021-11-13 14:55

#include<stdio.h>

#include<stdbool.h>

int main(){

    int W, H, N, count = 0;//count計算英文小寫字母個數

    scanf("%d %d", &W, &H);

    scanf("%d", &N);

    char s[200][200];

    bool check = true;

    //讀值入陣列

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

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

            scanf(" %c", &s[i][j]); // %c前面要空格,否則會讀到換行或空白字元

        }

    }

    //排除數字0

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

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

            if(s[i][j] >='a' && s[i][j] <= 'z'){

                count++;

            }

        }

    }

    //英文小寫字母數量小於目標數

    if(count < N){

        printf("Mission fail.");

        check = false; //避免繼續執行下段程式碼

    }

    //找出每個英文字母座標

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

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

            for(int k = 'a'; k <= 'z'; k++){

                if(s[i][j] == k){

                    if(check == true){

                    printf("%d %d\n", i, j);

                    }

                    if(count == N) //英文字母個數等於目標數

                        break;

                }

            }

        }

    }

}

 

我的程式碼可以照陣列順序輸出結果,但無法依照英文字母大小順序輸出,請問如何修改?

 
#28097: Re:請問我要如何修改才能讓座標值依照英文字母大小輸出?


linlincaleb@gmail.com (臨末之頌)

學校 : 新北市立板橋高級中學
編號 : 132772
來源 : [203.64.161.123]
最後登入時間 :
2024-07-29 10:02:49
f148. 2. 定向越野 (Orienteering) -- 2020年6月TOI練習賽新手組 | From: [1.162.202.217] | 發表日期 : 2021-11-13 18:32

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

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

            for(int k = 'a'; k <= 'z'; k++){

                if(s[i][j] == k){

                    if(check == true){

                    printf("%d %d\n", i, j);

                    }

                    if(count == N) //英文字母個數等於目標數

                        break;

                }

            }

        }

    }

這個的k放在迴圈最外面,就會按字母順序了



 
#28100: Re:請問我要如何修改才能讓座標值依照英文字母大小輸出?


ic231542211 (willie)

學校 : 不指定學校
編號 : 44051
來源 : [123.194.107.200]
最後登入時間 :
2022-09-15 15:14:37
f148. 2. 定向越野 (Orienteering) -- 2020年6月TOI練習賽新手組 | From: [123.194.107.200] | 發表日期 : 2021-11-13 19:10

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

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

            for(int k = 'a'; k <= 'z'; k++){

                if(s[i][j] == k){

                    if(check == true){

                    printf("%d %d\n", i, j);

                    }

                    if(count == N) //英文字母個數等於目標數

                        break;

                }

            }

        }

    }

這個的k放在迴圈最外面,就會按字母順序了

謝謝你,不過我修改後,還是有bug。

#include<stdio.h>

#include<stdbool.h>

int main(){

    int W, H, N, count = 0;//count計算英文小寫字母個數

    scanf("%d %d", &W, &H);

    scanf("%d", &N);

    char s[200][200];

    bool check = true;

    //讀值入陣列

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

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

            scanf(" %c", &s[i][j]); // %c前面要空格,否則會讀到換行或空白字元

        }

    }

    //排除數字0

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

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

            if(s[i][j] >='a' && s[i][j] <= 'z'){

                count++;

            }

        }

    }

    //英文小寫字母數量小於目標數

    if(count < N){

        printf("Mission fail.");

        check = false; //避免繼續執行下段程式碼

    }

    //找出每個英文字母座標

    for(int i = 'a'; i <= 'z'; i++){

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

            for(int k = 0; k < H; k++){

                if(s[j][k] == i){

                    if(check == true){

                    printf("%d %d\n", j, k);

                    }

                    if(count == N) //英文字母個數等於目標數

                        break;

                }

            }

        }

    }

}



 
#28102: Re:請問我要如何修改才能讓座標值依照英文字母大小輸出?


linlincaleb@gmail.com (臨末之頌)

學校 : 新北市立板橋高級中學
編號 : 132772
來源 : [203.64.161.123]
最後登入時間 :
2024-07-29 10:02:49
f148. 2. 定向越野 (Orienteering) -- 2020年6月TOI練習賽新手組 | From: [1.162.202.217] | 發表日期 : 2021-11-13 20:30

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

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

            for(int k = 'a'; k <= 'z'; k++){

                if(s[i][j] == k){

                    if(check == true){

                    printf("%d %d\n", i, j);

                    }

                    if(count == N) //英文字母個數等於目標數

                        break;

                }

            }

        }

    }

這個的k放在迴圈最外面,就會按字母順序了

謝謝你,不過我修改後,還是有bug。

#include

#include

int main(){

    int W, H, N, count = 0;//count計算英文小寫字母個數

    scanf("%d %d", &W, &H);

    scanf("%d", &N);

    char s[200][200];

    bool check = true;

    //讀值入陣列

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

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

            scanf(" %c", &s[i][j]); // %c前面要空格,否則會讀到換行或空白字元

        }

    }

    //排除數字0

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

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

            if(s[i][j] >='a' && s[i][j] <= 'z'){

                count++;

            }

        }

    }

    //英文小寫字母數量小於目標數

    if(count < N){

        printf("Mission fail.");

        check = false; //避免繼續執行下段程式碼

    }

    //找出每個英文字母座標

    for(int i = 'a'; i <= 'z'; i++){

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

            for(int k = 0; k < H; k++){

                if(s[j][k] == i){

                    if(check == true){

                    printf("%d %d\n", j, k);

                    }

                    if(count == N) //英文字母個數等於目標數

                        break;

                }

            }

        }

    }

}



你count沒有++

if(s[j][k] == i){

                    if(check == true){

                    printf("%d %d\n", j, k);

                    count++;

                    }

然後這裡改成這樣比較方便(之後不用再判斷)

if(count < N){

        printf("Mission fail.");

        return 0; //避免繼續執行下段程式碼

    }

 
#28109: Re:請問我要如何修改才能讓座標值依照英文字母大小輸出?


ic231542211 (willie)

學校 : 不指定學校
編號 : 44051
來源 : [123.194.107.200]
最後登入時間 :
2022-09-15 15:14:37
f148. 2. 定向越野 (Orienteering) -- 2020年6月TOI練習賽新手組 | From: [123.194.107.200] | 發表日期 : 2021-11-14 09:49

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

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

            for(int k = 'a'; k <= 'z'; k++){

                if(s[i][j] == k){

                    if(check == true){

                    printf("%d %d\n", i, j);

                    }

                    if(count == N) //英文字母個數等於目標數

                        break;

                }

            }

        }

    }

這個的k放在迴圈最外面,就會按字母順序了

謝謝你,不過我修改後,還是有bug。

#include

#include

int main(){

    int W, H, N, count = 0;//count計算英文小寫字母個數

    scanf("%d %d", &W, &H);

    scanf("%d", &N);

    char s[200][200];

    bool check = true;

    //讀值入陣列

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

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

            scanf(" %c", &s[i][j]); // %c前面要空格,否則會讀到換行或空白字元

        }

    }

    //排除數字0

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

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

            if(s[i][j] >='a' && s[i][j] <= 'z'){

                count++;

            }

        }

    }

    //英文小寫字母數量小於目標數

    if(count < N){

        printf("Mission fail.");

        check = false; //避免繼續執行下段程式碼

    }

    //找出每個英文字母座標

    for(int i = 'a'; i <= 'z'; i++){

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

            for(int k = 0; k < H; k++){

                if(s[j][k] == i){

                    if(check == true){

                    printf("%d %d\n", j, k);

                    }

                    if(count == N) //英文字母個數等於目標數

                        break;

                }

            }

        }

    }

}



你count沒有++

if(s[j][k] == i){

                    if(check == true){

                    printf("%d %d\n", j, k);

                    count++;

                    }

然後這裡改成這樣比較方便(之後不用再判斷)

if(count < N){

        printf("Mission fail.");

        return 0; //避免繼續執行下段程式碼

    }

 

不好意思,想請問為何要在

                     if(s[j][k] == i){

                    if(check == true){

                    printf("%d %d\n", j, k);

                    count++;

                    }

 加上ccount++?  因為我在 

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

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

            if(s[i][j] >='a' && s[i][j] <= 'z'){

                count++;

            }

        }

    }

已經有做 count++,另外使用"輸入範例5",總是在印出正確結果後,又印出奇怪的答案。



 
#28110: Re:請問我要如何修改才能讓座標值依照英文字母大小輸出?


ic231542211 (willie)

學校 : 不指定學校
編號 : 44051
來源 : [123.194.107.200]
最後登入時間 :
2022-09-15 15:14:37
f148. 2. 定向越野 (Orienteering) -- 2020年6月TOI練習賽新手組 | From: [123.194.107.200] | 發表日期 : 2021-11-14 09:49

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

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

            for(int k = 'a'; k <= 'z'; k++){

                if(s[i][j] == k){

                    if(check == true){

                    printf("%d %d\n", i, j);

                    }

                    if(count == N) //英文字母個數等於目標數

                        break;

                }

            }

        }

    }

這個的k放在迴圈最外面,就會按字母順序了

謝謝你,不過我修改後,還是有bug。

#include

#include

int main(){

    int W, H, N, count = 0;//count計算英文小寫字母個數

    scanf("%d %d", &W, &H);

    scanf("%d", &N);

    char s[200][200];

    bool check = true;

    //讀值入陣列

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

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

            scanf(" %c", &s[i][j]); // %c前面要空格,否則會讀到換行或空白字元

        }

    }

    //排除數字0

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

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

            if(s[i][j] >='a' && s[i][j] <= 'z'){

                count++;

            }

        }

    }

    //英文小寫字母數量小於目標數

    if(count < N){

        printf("Mission fail.");

        check = false; //避免繼續執行下段程式碼

    }

    //找出每個英文字母座標

    for(int i = 'a'; i <= 'z'; i++){

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

            for(int k = 0; k < H; k++){

                if(s[j][k] == i){

                    if(check == true){

                    printf("%d %d\n", j, k);

                    }

                    if(count == N) //英文字母個數等於目標數

                        break;

                }

            }

        }

    }

}



你count沒有++

if(s[j][k] == i){

                    if(check == true){

                    printf("%d %d\n", j, k);

                    count++;

                    }

然後這裡改成這樣比較方便(之後不用再判斷)

if(count < N){

        printf("Mission fail.");

        return 0; //避免繼續執行下段程式碼

    }

 

不好意思,想請問為何要在

                     if(s[j][k] == i){

                    if(check == true){

                    printf("%d %d\n", j, k);

                    count++;

                    }

 加上ccount++?  因為我在 

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

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

            if(s[i][j] >='a' && s[i][j] <= 'z'){

                count++;

            }

        }

    }

已經有做 count++,另外使用"輸入範例5",總是在印出正確結果後,又印出奇怪的答案。



 
#28115: Re:請問我要如何修改才能讓座標值依照英文字母大小輸出?


cges30901 (cges30901)

學校 : 不指定學校
編號 : 30877
來源 : [39.9.74.255]
最後登入時間 :
2024-10-14 22:20:08
f148. 2. 定向越野 (Orienteering) -- 2020年6月TOI練習賽新手組 | From: [27.53.9.177] | 發表日期 : 2021-11-14 15:44

 

   

    for(int i = 'a'; i <= 'z'; i++){

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

            for(int k = 0; k < H; k++){

                if(s[j][k] == i){

                    if(check == true){

                    printf("%d %d\n", j, k);

                    }

                    if(count == N) //英文字母個數等於目標數

                        break;

                }

            }

        }

    }

}




已經有做 count++,另外使用"輸入範例5",總是在印出正確結果後,又印出奇怪的答案。




還有兩個問題:

1. 在找出每個英文字母座標前要先把count設為0

2. break只能跳出一層迴圈,可是你有三層迴圈。可以改成return 0

 
#28119: Re:請問我要如何修改才能讓座標值依照英文字母大小輸出?


ic231542211 (willie)

學校 : 不指定學校
編號 : 44051
來源 : [123.194.107.200]
最後登入時間 :
2022-09-15 15:14:37
f148. 2. 定向越野 (Orienteering) -- 2020年6月TOI練習賽新手組 | From: [123.194.107.200] | 發表日期 : 2021-11-14 18:24

 

   

    for(int i = 'a'; i <= 'z'; i++){

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

            for(int k = 0; k < H; k++){

                if(s[j][k] == i){

                    if(check == true){

                    printf("%d %d\n", j, k);

                    }

                    if(count == N) //英文字母個數等於目標數

                        break;

                }

            }

        }

    }

}




已經有做 count++,另外使用"輸入範例5",總是在印出正確結果後,又印出奇怪的答案。




還有兩個問題:

1. 在找出每個英文字母座標前要先把count設為0

2. break只能跳出一層迴圈,可是你有三層迴圈。可以改成return 0

 

謝謝你,我搞定了,另外我也改寫成使用"布林值"的方法。

#include<stdio.h>

#include<stdbool.h>

int main(){

    int W, H, N, count = 0;//count計算英文小寫字母個數

    scanf("%d %d", &W, &H);

    scanf("%d", &N);

    char s[200][200];

    bool check = true;

    //讀值入陣列

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

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

            scanf(" %c", &s[i][j]); // %c前面要空格,否則會讀到換行或空白字元

        }

    }

    //排除數字0

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

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

            if(s[i][j] >='a' && s[i][j] <= 'z'){

                count++;

            }

        }

    }

    //英文小寫字母數量小於目標數

    if(count < N){

        printf("Mission fail.");

        check = false; //避免繼續執行下段程式碼

    }

    //找出每個英文字母座標

    count = 0;

    for(int i = 'a'; i <= 'z'; i++){

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

            for(int k = 0; k < H; k++){

                if(s[j][k] == i){

    if(check == true)                   

                    printf("%d %d\n", j, k);

                    count++;                   

                    if(count == N) //英文字母個數等於目標數

                       check = false;

                }

            }

        }

    }

}



 
ZeroJudge Forum