有一个整数序列表L,设计一个算法找最小元素值的最后一个的序号,序号从0开始,相同值的数序号相同。

有一个整数序列表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;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632