Как найти наименьшую цифру в числе и ее положение в векторе на C? - PullRequest
0 голосов
/ 15 сентября 2018

Может кто-нибудь, пожалуйста, помогите мне? Мне нужно поместить цифры числа в вектор, найти наименьшую цифру среди них и распечатать их вместе с их положением в векторе.

    int main()
    {
        int n,i=0,v[100],Min=9,Position;
        scanf("%d",&n);
        while(n!=0)
        {
            v[i]=n%10;
            if(v[i]<Min)
            {
                Min=v[i];
                Position=i;
            }
            i++;
            n=n/10;

        }
        printf("%d, %d", Min, Position);
        printf("\n");
    }

вход: 1234 выход: 1, 3 <---- есть проблема, я могу найти минимальную цифру, но я не могу показать ее позицию. вместо 0 это 3, отсчитывается от обратного ввода: 2314 вывод: 1, 1 <- должно было быть 1,2 </p>

Редактировать: Спасибо "nicomp", теперь окончательный код выглядит следующим образом.

int main()
{
     {
        int n,m,i,v[100],Lenght=0,Min=9,Position;
        scanf("%d",&n);
        m=n;
        while(m!=0)
        {
            m=m/10;
            Lenght++;
        }
        i=(Lenght-1);
        while(n!=0)
        {
            v[i]=n%10;
            if(v[i]<Min)
            {
                Min=v[i];
                Position=i;
            }
            i--;
            n=n/10;

        }
        printf("%d, %d", Min, Position);
        printf("\n");
    }
}

Ответы [ 2 ]

0 голосов
/ 15 сентября 2018

Когда вы входите для ввода 1234 (ваш код) начинается с 4, и позиция становится 0 первоначально и позже, когда вы достигнете цифры 1, позиции увеличиваются до 3 - лучший подход - прочитать числа от 1 до 4 , что можно сделать рекурсивно, вот код для этого:

 #include<stdio.h>

 int vector[100];
 int i;
 int position;
 int Min=9;

 void locate(int num)
 {
     if(num>0)
     {
          locate(num/10);
          vector[i]=num%10;
          if(vector[i]<Min)
          {
               position = i+1;
               Min=vector[i];
          }
          ++i;
     }
 }

 int main()
 {
     int n;
     scanf("%d",&n);
     if(n<0)
         n=-n;
     locate(n);

     printf("Position %d  Min %d\n",position, Min);
     return n;
}

ПРИМЕЧАНИЕ. Если для ввода задано значение 1234, минимальная позиция цифры отображается как 1 вместо 0, так как нам нужно не читать ее как позицию массива, а как фактическую позицию.

0 голосов
/ 15 сентября 2018

Вам не нужно искать длину n с дополнительным циклом. Вы можете просто вычесть position из i, как показано ниже, поскольку i будет содержать длину n.

        int main()
        {
            int n,i=0,v[100],Min=9,Position=0;
            scanf("%d",&n);
            while(n!=0)
            {
                v[i]=n%10;
                if(v[i]<Min)
                {
                    Min=v[i];
                    Position=i;
                }
                i++;
                n=n/10;

            }
            printf("%d, %d", Min, (i - Position-1)); //<-----Here
           printf("\n");
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...