有人可以帮帮我吗 ?我需要将数字的数字放入向量中,找到它们中的最小数字,然后将其与向量中的位置一起打印。
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");
}
}
当你输入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
,因为我们不需要将其作为数组位置而是实际位置读取。
您不需要通过额外的循环找到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");
}