如何找到数字中的最小数字及其在 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
output: 1, 3 <---- 有问题,我可以找到最小数字,但我无法显示它的位置。不是 0 而是 3,它从倒数 input: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
时变为 0
位置增加到 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
,因为我们不需要将其读取为数组位置,而是实际位置。
有人可以帮助我吗?我需要将数字的数字放入一个向量中,找到其中最小的数字,并将它连同它在向量中的位置一起打印出来。
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 output: 1, 3 <---- 有问题,我可以找到最小数字,但我无法显示它的位置。不是 0 而是 3,它从倒数 input: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
时变为 0
位置增加到 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
,因为我们不需要将其读取为数组位置,而是实际位置。