繁体   English   中英

如何找到数字中的最小数字及其在C中的向量位置?

[英]How to find the smallest digit in a number and its position in a vector in C?

有人可以帮帮我吗 ? 我需要将数字的位数放入向量中,找到其中的最小位数,并将其与向量中的位置一起打印。

    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

编辑:谢谢“ 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");
    }
}

您无需使用附加循环即可找到n长度。 您可以如下所示从i减去position ,因为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");
        }

当您输入1234 (您的代码)时,它以4开头,位置最初为0 ,之后到达数字1 ,位置增加为3更好的方法是读取数字14 ,这样可以递归完成,这是执行此操作的代码:

 #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因为我们不需要将其读取为数组位置,而是实际位置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM