如何在C中按打字顺序打印整数 - 增加,减少或均匀地打印

问题描述:

我试图编写一个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

思考:

  • 如果“第一”的号码属于一个下降的你只知道,甚至,在你看到的“第二”号或上升序列。

  • “第三”数字属于与前两个相同的序列,或者是另一个序列的“第一个”数字。

因此:检查两个数字并指定序列类型。
继续检查相同序列中的数字。
如果您不能分配相同的序列,请返回检查两个数字并分配一个序列。

喜欢的东西

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

#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; 
}