题目链接
戳我
题目形容
从程序表L中删除具备最小值的元素(假如惟一)并友函数返回被删元素的值。空出的元素由最初一个元素填补。
输出
输出蕴含一个整数n代表程序表L长度。
接下来蕴含n个整数,代表程序表L中的元素。
输入
若程序表为空,输入 "error".
若不为空,输入最小元素的值并输入删除最小值之后的程序表。
样例输出
3
1 2 3
样例输入
1
3 2
留神点
这里要留神审题,删除最小元素,并把最初一个元素放到删除元素的地位上,
并不需要删除元素后,挪动后续元素。
C++参考解答
#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAXSIZE 50typedef int ElemType;typedef struct { ElemType data[MAXSIZE]; int length;}SqList;//初始化程序表void InitList(SqList& L) { L.length =0; memset(L.data, 0, sizeof(ElemType));}//打印程序表void PrintList(SqList L) { int i; for (i = 0; i < L.length; i++) { printf("%d ", L.data[i]); } printf("\n");}//删除程序表元素bool ListDelete(SqList& L, int i) { if (i<0 || i>L.length) { return false; } if (L.length == 0) { return false; } //不须要挪动元素 //int j; /*for(j=i;j<L.length-2;j++){ L.data[j] = L.data[j+1]; }*/ L.data[i - 1] = L.data[L.length - 1]; L.length--; return true;}//求程序表中最小的元素ElemType ListMin(SqList L) { int x = L.data[0]; int i; for (i = 1; i < L.length; i++) { if (L.data[i] < x) { x = L.data[i]; } } return x;}//求出程序表中最小元素的地位int MinPos(SqList L,int x) { int i; for (i = 0; i < L.length; i++) { if (L.data[i] == x) { return i + 1; } }}int main() { SqList L;int i,n; ElemType x,min; InitList(L); scanf("%d", &n); L.length = n; for (i = 0; i < L.length; i++) { scanf("%d", &L.data[i]); } min = ListMin(L); ListDelete(L, MinPos(L,min)); if (L.length == 0) { printf("error\n"); }else { printf("%d\n", min); PrintList(L); } return 0;}