2013-05-27 104 views
-2

今天我在編碼比賽中遇到了一個令人惱火的問題。我通過第一輪奶油,但在第二輪,下面的問題讓我陷入困境。艱難的比賽循環

Question: Input N = 4 
      Output: 
       1 
       0 1 
       1 0 1 
       0 1 0 1 

我嘗試了很多事情,但每次失敗。

除了這個愚蠢的錯誤解決方案,我嘗試了很多花哨的東西,最終失敗了。 我的C知識的哪些部分很薄弱?

如果你有這個問題,你會如何解決它?

+2

您的while循環條件中有N個,但是您在循環中使用了i。這對我來說毫無意義。 –

+3

你可能想重新發布你的代碼,因爲現在看起來你沒有試過任何東西,而是在請求人們爲你解決問題。 –

+1

共同爲什麼你會投票呢!我誠實地問自己的弱點,並強調C的哪一部分能夠幫助我解決像這樣的問題。 –

回答

1

這爲我做了這份工作。

int i,j,flag; 
int num=4; 

flag=1; 
for(i=0;i<num;i++) 
{ 
    for(j=0;j<i+1;j++) 
    { 
      printf("%d",(j+flag)%2); 
    } 
    if(flag) 
    { 
      flag=0; 
    } 
    else 
    { 
      flag=1; 
    } 
    printf("\n"); 

} 
+0

謝謝T Vignesh Prabhu –

1

這是你想要的嗎?

for(int k = 0; k < N; k++){ 
    for(int i = 0; i < k+1; i++){ 
     if(i % 2 == k % 2) 
      printf("1 "); 
     else 
      printf("0 "); 
    }; 
    printf("\n"); 
} 
+2

換行符和空格怎麼樣? – EnKrypt

+0

不,我不這麼認爲 –

+0

編輯,應該現在工作。 – sashkello

4

似乎很平凡的我:

int main(int argc, char *argv[]) 
{ 
    int n = strtol(argv[1], NULL, 10); 
    for (int i = 0; i < n; i++) { 
      for (int j = 0; j <= i; j++) { 
        printf("%d ", i % 2 ? j % 2 : 1 - j % 2); 
      } 
      printf("\n"); 
    } 

    return 0; 
} 
+0

剛纔你提出了這個解決方案,我的意思是當你看到代碼後? –

+0

@SwaroopNagendra當然,還有什麼時候呢? – 2013-05-27 12:49:07

+0

非常感謝,我猜它的實踐。現在我回到了KN King。 –

2

你驚慌失措。由於您打印的值取決於行和列,請同時使用這兩個值。並更好地爲你的變量命名。

void printBinaryTriangle(const unsigned int rows) { 
    for(int row = 1; row <= rows; ++row) { 
     for (int column = 0; column < row; ++column) { 
      printf("%d ", (row + column) % 2); 
     } 
     putchar('\n'); 
    } 
} 
+0

非常感謝。我真的很感激它 –

+0

我不是隻寫一個'main'方法,因爲你將來可能需要從不同來源獲得行數,而不是修復'4'。這是一個比賽問題,但你仍然可以考慮未來的使用。當您將編程作爲工作的一部分時,您需要記住需求會發生變化。 –