2013-04-14 28 views
0

我試圖編寫一個c程序時遇到問題。程序必須將整數存儲在數組中(從鍵盤讀取)。例如,如果輸入:3 2 0 5 5 5 8 9,輸出應爲:如何在C中按打字順序打印整數 - 增加,減少或均勻地打印

3 2 0 - 遞減 5 5 5 - 均勻 8 9 - 越來越多

對我來說問題是,我不能寫一個能夠在所有情況下工作的算法。 我試圖用另一個數組「標記」元素(使用相同的索引,爲每個整數保存一個值1-增加,-1減少和0均勻),但這部分工作。 你有其他想法嗎? 感謝提前:)

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

main() { 

    int array[100]; 
    int flag[100]; 
    int num, i; 

    printf("Enter how many numbers you want to type: "); 
    scanf("%d",&num); 

    for(i=0;i<num;i++) { 
     scanf("%d",&array[i]); 
    } 
    for(i=0;i<num;i++){ 
     if((array[i]<array[i+1])) { 
      flag[i]=flag[i+1]=1; 
     } 
     if(array[i]>array[i+1]) { 
      flag[i]=flag[i+1]=-1; 
     } 
    } 

    for(i=0;i<num;i++) { 
     if(array[i]==array[i+1]) { 
      flag[i]=flag[i+1]=0; 
     } 
    } 
    for(i=0;i<num;i++){ 
     printf("%d ",flag[i]); 
    } 
    printf("\n"); 

    for(i=0;i<num;i++) { 
     if(flag[i]==1) { 
      do{ 
       if(flag[i]==1){ 
        printf("%d ",array[i]); 
        i++; 
       } 
      }while(flag[i]==1); 
      printf(" - increasing\n"); 
     } 

     if(flag[i]==0) { 
      do{ 
       if(flag[i]==0){ 
        printf("%d ",array[i]); 
        i++; 
       } 
      }while(flag[i]==0); 
      printf(" - evenly\n"); 
     } 

     if(flag[i]==-1) { 
      do{ 
       if(flag[i]==-1) { 
        printf("%d ",array[i]); 
        i++; 
       } 
      }while(flag[i]==-1); 
      printf(" - decreasing\n"); 
     } 

    } 

    system("pause"); 
    return 0; 
} 
+1

你可以添加更多的例子?如果用戶輸入'4 2 5 8 0 9 1 6 6',你想要什麼? – vidit

+0

是的,並且應該在打字的順序由用戶 – user2280550

+0

4 2被劃分 - 遞減 5 8 - 增加 0 9 - 增加 1 6 - 增加 6 - 我不知道, – user2280550

回答

0

思考:

  • 如果「第一」的號碼屬於一個下降的你只知道,甚至,在你看到的「第二」號或上升序列。

  • 「第三」數字屬於與前兩個相同的序列,或者是另一個序列的「第一個」數字。

因此:檢查兩個數字並指定序列類型。
繼續檢查相同序列中的數字。
如果您不能分配相同的序列,請返回檢查兩個數字並分配一個序列。

喜歡的東西

int *n1, *n2, *n3; 
n1 = <first element>; 
n2 = n1 + 1; 
n3 = n2 + 1; 

/* some kind of loop */ 
if ((n3 - n2) HAS_SOME_SIGN_AS (n2 - n1)) /* n3 belongs to the sequence */; 
n1++; 
n2++; 
n3++; 
/* end loop */ 
+0

感謝您的幫助! :) – user2280550

0
#include <stdio.h> 

int status(a, b){ 
    if(a < b) return 1; 
    if(a > b) return -1; 
    return 0; 
} 

int main() { 
    int array[100]={0}; 
    int old_status, new_status; 
    int old_pos; 
    int num, i, j; 
    const char* status_message[] = {"decreasing","evenly","increasing", "i don't know"}; 

    printf("Enter how many numbers you want to type: "); 
    scanf("%d",&num); 
    for(i=0;i<num;i++) 
     scanf("%d",&array[i]); 

    //{num | 1 < num <= 100} 
    old_status =status(array[0], array[1]); 
    old_pos = 0; 
    for(i=1;i<num;++i){ 
     new_status = status(array[i-1], array[i]); 
     if(old_status != new_status){ 
      for(j=old_pos;j<i;++j) 
       printf("%d ", array[j]); 
      printf("- %s\n", status_message[1 + old_status]); 
      old_status = (i<num-1)? status(array[i], array[i+1]):2; 
      old_pos = i; 
     } 
    } 
    if(old_pos < num){ //not output section output 
     for(j=old_pos;j<i;++j) 
      printf("%d ", array[j]); 
     printf("- %s\n", status_message[1 + old_status]); 
    } 

    return 0; 
}