题目如图
我的代码如下
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int *elem;
int length;
}Sqlist;
void insert(Sqlist *L,int m,int n)
{
if(m>=1 && m<=L->length+1){
for(int j=L->length-1;j>=m-1;j--)
L->elem[j+1]=L->elem[j];
L->elem[m-1]=n;
++L->length;}
}
void delete_(Sqlist *L,int m)
{
if(m<1 || m>L->length)
printf("%d\n",-1);
if(m>=1 && m<=L->length){
printf("%d\n",L->elem[m-1]);
for (int j=m;j<=L->length;j++)
L->elem[j-1]=L->elem[j];
--L->length;}
}
int main()
{
int number,sign,m,n;
Sqlist tmp;
Sqlist *L=&tmp;
L->elem=(int*)malloc(sizeof(int)*100010);
scanf("%d",&L->length);
for (int i=0;i<L->length;i++)
scanf("%d",&L->elem[i]);
scanf("%d",&number);
for (int k=0;k<number;k++)
{
scanf("%d",&sign);
if (sign==1)
{
scanf("%d%d",&m,&n);
insert(L,m,n);
}
if (sign==2)
{
scanf("%d",&m);
delete_(L,m);
}
}
free(L->elem);
return 0;
}
问题是,在一些输出中出现了问题,而且只错其中一个输出,前后都对,如图
59会变成73?
你的测试用例呢?实际输入的数据是哪些?
因为C语言数组下标是从0开始计数的,你写代码时最好也按0开始计数,别和1开始计数的混着用,不然会很容易出错。如果题目中的k是从1开始计数的,你调用的时候把它转化为0开始计数的。
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int *elem;
int length;
} Sqlist;
void insert(Sqlist *L, int m, int n) {
if (m < 0)
m = 0;
if (m >= L->length)
m = L->length;
for (int i = L->length - 1; i >= m; i--)
L->elem[i + 1] = L->elem[i];
L->elem[m] = n;
++L->length;
}
void delete_(Sqlist *L, int m) {
if (m < 0 || m >= L->length) {
printf("-1\n");
return;
}
printf("%d\n", L->elem[m]);
for (int i = m; i < L->length; i++)
L->elem[i] = L->elem[i + 1];
--L->length;
}
int main() {
int number, sign, m, n;
Sqlist tmp;
Sqlist *L = &tmp;
L->elem = (int *)malloc(sizeof(int) * 100010);
scanf("%d", &L->length);
for (int i = 0; i < L->length; i++)
scanf("%d", &L->elem[i]);
scanf("%d", &number);
for (int k = 0; k < number; k++) {
scanf("%d", &sign);
if (sign == 1) {
scanf("%d%d", &m, &n);
insert(L, m - 1, n);
}
if (sign == 2) {
scanf("%d", &m);
delete_(L, m - 1);
}
}
free(L->elem);
return 0;
}
插入函数有问题,改成下面这样。
j = m 的时候,只给L->m+1赋值了,L -> m并没有改变。要把L->m 改成插入的新值。
void insert(Sqlist *L,int m,int n)
{
if(m>=1 && m<=L->length){
for(int j=L->length-1;j>=m;j--)
L->elem[j+1]=L->elem[j];
L->elem[m]=n;
++L->length;}
}
上面结果是按你的代码来的,下面是修改后的