共计 1262 个字符,预计需要花费 4 分钟才能阅读完成。
题目链接
戳我
题目形容
从程序表 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 50
typedef 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;
}
正文完