有一个整数序列表L,设计一个算法找最小元素值的最后一个的序号,序号从0开始,相同值的数序号相同。
输入格式:
第1行输入为位元素个数len,len为整形。
第2行输入为len个整形元素的值。
输出格式:
一个整形数值,即最后一个元素的下标序号,下标从0开始。
输入样例:
7
1 5 1 1 3 2 4
输出样例:
3
输入样例2:
10
4 3 4 7 2 0 3 4 7 7
输出样例2:
4
本人代码:#include
#include
#define N 100
typedef struct SList
{
int data[N];
int size;
}SL;
void SLInit(SL ps)
{
ps=(SL)malloc(sizeof(SL));
ps->size=0;
}
void SLCreate(SL* ps, int n)
{
ps->size=n;
int x=0;
for(int i=0;isize;i++)
{
scanf("%d",&x);
getchar();
ps->data[i]=x;
}
}
int SLFind(SL* ps)
{
int min=ps->data[0];
int pos=0;
for(int i=0;isize;i++)
{
if(ps->data[i]
{
min=ps->data[i];
pos=i;
}
}
return pos;
}
int main(){
SL plist;
SLInit(&plist);
int n=0;
scanf("%d",&n);
getchar();
SLCreate(&plist,n);
int min=SLFind(&plist);
printf("%d",min);
return 0;
}
本人代码只能得到最开始的最小元素值的下标,请问如何得到最小元素值的最后一个的序号.
if(ps->data[i]<=min)
(1)SLInit函数中,不需要在malloc了,结构体里已经分配内存了
(2)SLFind函数中,
int min = ps->data[ps->size-1]; //从后往前遍历
for循环改成 for (int i = ps->size-1; i>=0; i--)
代码修改如下:
#include <stdlib.h>
#include <stdio.h>
#define N 100
typedef struct SList
{
int data[N];
int size;
}SL;
void SLInit(SL* ps)
{
//ps = (SL)malloc(sizeof(SL)); //修改,这里不需要在申请内存
ps->size = 0;
}
void SLCreate(SL* ps, int n)
{
ps->size = n;
int x = 0;
for (int i = 0; i<ps->size; i++)
{
scanf("%d", &x);
getchar();
ps->data[i] = x;
}
}
int SLFind(SL* ps)
{
int min = ps->data[ps->size-1]; //从后往前遍历
int pos = 0;
for (int i = ps->size-1; i>=0; i--)
{
if (ps->data[i] < min)
{
min = ps->data[i];
pos = i;
}
}
return pos;
}
int main() {
SL plist;
SLInit(&plist);
int n = 0;
scanf("%d", &n);
getchar();
SLCreate(&plist, n);
int min = SLFind(&plist);
printf("%d", min);
return 0;
}