2-4 在指定位置插入元素
分数 6
作者 张志梅
单位 青岛大学
给出 n 个整数,在指定位置 pos(位置从1起始)前插入给定的值 val,请输出插入后的整数序列。
输入格式:
包含多组测试。第一行会有一个 T 表示组数 (1<=T<=20),每组测试的第一行输入三个数 n , pos , val,第二行输入n个整数。其中,1<=n<=100,1<=pos<=n+1,1<=val<=100。
输出格式:
每组测试输出包含一行,行末不允许有多余的空格。
输入样例:
1 2 3 4 5
| 2 5 1 4 1 2 3 4 5 6 3 9 2 4 6 8 0 2
|
输出样例:
1 2
| 4 1 2 3 4 5 2 4 9 6 8 0 2
|
答案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| #include <iostream> using namespace std;
typedef struct { int *data; int length; } sqList;
void initList(sqList &L, int n) { L.data = new int[n+1]; L.length = 0; }
void insertElem(sqList &L, int pos, int val) { for (int i = L.length-1; i >= pos-1; i--) { L.data[i+1] = L.data[i]; } L.data[pos-1] = val; L.length++; }
int main() { int T; cin >> T; for (int i = 0; i < T; i++){ int n, pos, val; cin >> n >> pos >> val; sqList L; initList(L, n); for (int j = 0; j < n; ++j) { cin >> L.data[j]; L.length++; } insertElem(L, pos, val); for (int k = 0; k < L.length; k++) { if (k != 0) { cout << " "; } cout << L.data[k]; } if (i != T-1) { cout << endl; } } }
|
总结
我的错误->元素后移循环的起始条件错误
insertElem 函数中,后移循环的起始下标写为 L.data[L.length-1],这是把 “元素值” 当成了 “下标”,完全错误。
应该是L.length-1