题目:设计一个程序,生成两个按值非递减有序排列的线性表LA和LB,再将LA和LB归并为一个新的线性表LC,且LC中的数据仍按值非递减有序排列,输出线性表LA、LB、LC。
以下是自己的代码,但是好像是main 函数的后半部分从设置完LA和LB的随机数之后就有错误,不知道错在哪,
##
#include <stdio.h>
#include <algorithm>
#include<time.h>
#include<cstdlib>
#include<iostream>
using namespace std;
bool cmp(int a,int b)
{
return a <= b;
}
void print_array(int a[],int range)
{
int i = 0;
while(i < range)
{
printf("%d ",a[i ++]);
}
printf("\n");
}
int main()
{
int T1, T2;
srand((unsigned)time(NULL));
cout << "请输入第一个线性表元素的个数:" << endl;
cin >> T1;
int* LA= new int[T1];
for (int i = 0; i < T1; i++) {
LA[i] = rand()%10;
}
cout << "请输入第二个线性表元素的个数:" << endl;
cin >> T2;
int* LB = new int[T2];
for (int i = 0; i < T2; i++)
{
LB[i] = rand()%10;;
}
int LC[T1+T2];
sort(LA,LA + T1,cmp);
printf("LA: ");
print_array(LA,T1);
sort(LB,LB + T2,cmp);
printf("LB: ");
print_array(LB,T2);
int i = 0;
while(i < T2)
{
LC[i] = LA[i];
LC[i + T2] = LB[i ++];
}
sort(LC,LC + T1+T2,cmp);
printf("LC: ");
print_array(LC,T1+T2);
system("pause");
return 0;
}
这种题目是需要比较LA、LB中元素的大小,按照LA、LB元素的大小顺序添加到LC中, LC直接就是有序的。
不应该是简单的合并LA、LB元素到LC中之后再对LC用sort()重新排序。
你题目的解答代码如下:
#include <stdio.h>
#include <algorithm>
#include<time.h>
#include<cstdlib>
#include<iostream>
using namespace std;
bool cmp(int a,int b)
{
return a <= b;
}
void print_array(int a[],int range)
{
int i = 0;
while(i < range)
{
printf("%d ",a[i ++]);
}
printf("\n");
}
int main()
{
int T1, T2;
srand((unsigned)time(NULL));
cout << "请输入第一个线性表元素的个数:" << endl;
cin >> T1;
int* LA= new int[T1];
for (int i = 0; i < T1; i++) {
LA[i] = rand()%10;
}
cout << "请输入第二个线性表元素的个数:" << endl;
cin >> T2;
int* LB = new int[T2];
for (int i = 0; i < T2; i++)
{
LB[i] = rand()%10;;
}
int LC[T1+T2];
sort(LA,LA + T1,cmp);
printf("LA: ");
print_array(LA,T1);
sort(LB,LB + T2,cmp);
printf("LB: ");
print_array(LB,T2);
int i = 0, j = 0, k =0;
while(i < T1 && j < T2)
{
if (LA[i] < LB[j])
LC[k++] = LA[i++];
else
LC[k++] = LB[j++];
}
while(i < T1)
LC[k++] = LA[i++];
while(j < T2)
LC[k++] = LB[j++];
printf("LC: ");
print_array(LC,T1+T2);
system("pause");
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!