2015-02-09 68 views
0

我試圖創建一個程序打印如下圖繪製內的另一個

000000 
011110 
010010 
011110 
000000 

我做了這個小碼

#include <stdio.h> 
#include <stdlib.h> 

int main(void) 
{ 
    int i, j, side; 

    printf("Enter side: "); 
    scanf("%d", &side); 

    for(j = 0; j < side; j++) 
    { 
     for(i = 0; i < side; i++) 
     if((i*j == 0) || ((i*j)%side==0)) //as should be the condition here 
      printf("0"); 
     else 
      printf("1"); 
    printf("\n"); 
    }  
    return 0;  
} 

不打印我想要什麼的問題是在一個正方形條件如果我不知道應該怎麼樣我不擅長數學。有人可以幫我解決這個小問題嗎?

編輯

例如

條目:8

輸出:

00000000 
01111110 
01000010 
01000010 
01000010 
01111110 
00000000 
+2

如果它應該畫正方形,爲什麼你的例子輸出顯示矩形? – interjay 2015-02-10 00:01:17

+0

如果你需要的數字恰好是這個例子中的數字,那麼你不需要制定一個算法來決定是打印1還是0,你需要的是將數值存儲在數組中,如果你需要一個通用的算法** Rizier123 **的解決方案可能會或可能不適合你。 – 2015-02-10 00:06:23

+1

你需要解釋程序應該做什麼。目前還不清楚其他尺寸的產品應該如何。目前還不清楚爲什麼產量不是正方形。 – interjay 2015-02-10 00:10:34

回答

3

這應該爲你工作:

(這裏我只是簡單的搜索數最少的:rows(side - 1)columns(side)rowCount(j)columnCount(i)然後i使用模運算符來獲得或者01

#include <stdio.h> 

int min(int x, int y) { 
    return (x < y ?x:y); 
} 

int main() {  
    int i, j, side; 

    printf("Enter side: "); 
    scanf("%d", &side); 

    for(j = 1; j < side; j++) { 
     for(i = 1; i <= side; i++) 
      printf("%d", (min(i - 1, min(j - 1, min(side - j - 1, side - i)))) % 2);   
     printf("\n"); 
    }  
    return 0;  
} 

輸入:

6 

輸出:

000000 
011110 
010010 
011110 
000000 

編輯:

如果你只想要1萬1的和後無不洋溢着0的,那麼這應該爲你工作:

(這裏我只是簡單的檢查一下是否是第二個方塊,如果是打印1則打印0)

#include <stdio.h> 

int min(int x, int y) { 
    return (x < y ?x:y); 
} 

int main() { 
    int i, j, side; 

    printf("Enter side: "); 
    scanf("%d", &side); 

    for(j = 1; j < side; j++) { 
     for(i = 1; i <= side; i++) 
      if(min(i - 1, min(j - 1, min(side - j - 1, side - i))) == 1) 
       printf("1"); 
      else 
       printf("0"); 
     printf("\n"); 
    } 
    return 0; 
} 

輸入:

6 // 8 

輸出:

000000 // 00000000 
011110 // 01111110 
010010 // 01000010 
011110 // 01000010 
000000 // 01000010 
     // 01111110 
     // 00000000 
+0

爲什麼downvote?請解釋 – Rizier123 2015-02-10 00:00:44

+0

因爲它是錯誤的(它可能會顯示更大尺寸的奇怪形狀),並且因爲它沒有解釋。爲他們解決某人的功課毫無意義。真正的問題是爲什麼有人提出了一個甚至不正確的代碼塊答案。 – interjay 2015-02-10 00:01:59

+0

@interjay忽略了一些東西,現在它應該是正確的,也試圖解釋我在這裏做什麼 – Rizier123 2015-02-10 00:06:40

0

這確實if試試這個

#include <stdio.h> 
#include <stdlib.h> 

static inline int isValid(int i, int j, int side) 
{ 
    return (((i == 1) || (i == side - 2)) && ((j != 0) && (j != side - 1))); 
} 

int main(void) 
{ 
    int i, j, side; 

    printf("Enter side: "); 
    scanf("%d", &side); 

    for (j = 0 ; j < side ; j++) 
    { 
     for (i = 0 ; i < side ; i++) 
     { 
      if ((isValid(i, j, side) != 0) || (isValid(j, i, side) != 0)) 
       printf("1"); 
      else 
       printf("0"); 
     } 
     printf("\n"); 
    } 
    return 0; 
} 

您只需要檢查i == 1,因爲它是第二行/列,或者如果i == side - 2因爲那將是前一行/列與j相同,爲了防止在角上畫一個十字,您需要檢查如果i == 1j != 0並且如果i == side - 2然後j != side - 1

當然,你可以做到這一點

#include <stdio.h> 
#include <stdlib.h> 

int main(void) 
{ 
    int i, j, side; 

    printf("Enter side: "); 
    scanf("%d", &side); 

    /* print first row all 0's */ 
    for (j = 0 ; j < side ; j++) 
     printf("0"); 
    printf("\n"); 

    for (j = 1 ; j < side - 1 ; j++) 
    { 
     /* print first column 0 always */ 
     printf("0"); 
     if ((j == 1) || (j == side - 2)) 
     { /*      ^this is because the loops start at 0 */ 
      /* this is the second of side - 1 row */ 
      for (i = 1 ; i < side - 1 ; i++) 
       printf("1"); 
     } 
     else 
     { 
      /* if the column is the second or it's the (side - 1)th print 1, otherwise 0 */ 
      for (i = 1 ; i < side - 1 ; i++) 
       printf(((i == 1) || (i == side - 2)) ? "1" : "0"); 
     } 

     if (i == side - 2) 
      printf("1"); 
     else 
      printf("0"); 

     printf("\n"); 
    } 

    /* print last row all 0's */ 
    for (j = 0 ; j < side ; j++) 
     printf("0"); 
    printf("\n"); 
    return 0; 
} 
+0

這似乎不正確,即使是你應該解釋它。這些乘法和模數是完全不必要的,似乎只不過是混淆而已,因爲它們可以用簡單的比較來代替(例如'(1 + i)%side == 0' - >'i == side-1') 。 – interjay 2015-02-09 23:58:40

+0

@iharob:不會打印中心的兩個零點 – CooperJames 2015-02-09 23:59:30

+0

他們不是,想到這一點完全有效,當然它們並不是真的需要,但是因爲無法知道OP究竟在嘗試什麼那麼,這回答了OP的問題。 – 2015-02-09 23:59:42

相關問題