मैंने https://nus.kattis.com/problems/apples पर निम्न समस्या को हल करने का प्रयास किया। लेकिन मेरा कोड परीक्षण मामलों को पास नहीं करता है। मैं सी के लिए नया हूं और मुझे विशेष रूप से यकीन नहीं है कि मैं कहां गलत हो गया हूं। मेरा कोड इस प्रकार है:

#include <stdio.h>

int main(){

    int r,c;
    scanf("%d",&r);
    scanf("%d",&c);
    char arr[r][c];
    for (int i=0; i<r;i++){
        for(int j=0;j<c;j++){
            if(arr[i][j]=='a' && arr[i+1][j]=='.'){
                arr[i][j] = '.';
                arr[i+1][j] = 'a';
            }
        }
    }
    for(int i=0;i<r;i++){
        for(int j=0;j<c;j++){
            printf("%c",arr[i][j]);
        }
    }
}

अगर मुझे अनुमान लगाना होता, तो मैं अपनी उंगली यह जांचने पर लगाता कि क्या एआर [i] [जे] 'ए' के ​​बराबर है, क्योंकि एआर पर 'ए' [i] [जे] एक सामान्य 'ए' से अलग पते का होगा '।

1
Prav 25 पद 2019, 06:11

2 जवाब

सबसे बढ़िया उत्तर

जैसा कि बताया गया है, आप प्रारंभिक ग्रिड रीडिंग कोड खो रहे हैं। चूंकि यह समस्या को सीधे हल करने में आपकी मदद नहीं करेगा, ग्रिड पढ़ने के लिए कोड आपको आगे बढ़ने में मदद कर सकता है।

चूंकि यह एक 2d ग्रिड है, इसलिए डेटा स्टोर करने के दो तरीके हैं:

  • पंक्ति प्रमुख (जिस तरह से आपने किया, और डेटा व्यवस्थित करने का एक प्राकृतिक तरीका), जहां डेटा पंक्तियों की एक सरणी में संग्रहीत किया जाता है
  • स्तंभ प्रमुख, जहां डेटा स्तंभों की एक सरणी में संग्रहीत किया जाता है

समस्या के लिए डेटा को कॉलम प्रमुख प्रारूप में संग्रहीत करना अधिक फायदेमंद होगा। लेकिन पूर्णता के लिए मैं आपको भंडारण के दोनों तरीके प्रदान करूंगा

// Row major
char arr[r][c];
int count = 0;
int ch;
while (EOF != (ch = fgetc(fp))) {
    if(ch!='a' && ch != '#' && ch != '.') continue;
    row = count / c;
    col = count % c;
    arr[row][col] = ch;
}
// Col major
char arr[c][r];
int count = 0;
int ch;
while (EOF != (ch = fgetc(fp))) {
    if(ch!='a' && ch != '#' && ch != '.') continue;
    row = count / c;
    col = count % c;
    arr[col][row] = ch;
}

कारण मैं आपको कॉलम प्रमुख भंडारण की सिफारिश कर रहा हूं, यह समस्या बेहतर हल हो जाएगी यदि आप प्रत्येक कॉलम को अलग से मानते हैं।

0
dvhh 25 पद 2019, 08:50

आपका कोड इनपुट (ग्रिड की सामग्री) को ठीक से नहीं पढ़ रहा है। शर्तों की जांच करने और अधिक कार्य करने से पहले आपको मानक इनपुट से स्कैनफ या अन्य इनपुट फ़ंक्शन के साथ पढ़ना चाहिए।

हालांकि, अगर आप r * c चार सरणी के आकार की घोषणा करते हैं, तो उन्हें इनपुट पुश करें और कोड चलाएं, यह rवें इंडेक्स पर arr[i+1][j]=='.' भाग पर जांच करेगा। आपको सरणी को थोड़ा बड़ा घोषित करके या अपने तर्क को संशोधित करके इससे बचना चाहिए।

2
Gratus 25 पद 2019, 03:18