#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;
}
}
}
}
}
我的程式碼可以照陣列順序輸出結果,但無法依照英文字母大小順序輸出,請問如何修改?
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放在迴圈最外面,就會按字母順序了
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;
}
}
}
}
}
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; //避免繼續執行下段程式碼
}
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(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",總是在印出正確結果後,又印出奇怪的答案。
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(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",總是在印出正確結果後,又印出奇怪的答案。
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
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;
}
}
}
}
}