【问题描述】设A=(a1,...an)和B=(b1,...bn)均为顺序表,A'和B'分别为A和B中除去最大共同前缀后的子表。若A'=B'=空表,则A=B;若A'=空表,而B'≠空表,或者两者均不为空表,且A'的首元小于B'的首元,则A<B;否则A>B。试写一个比较A,B大小的算法。
【输入形式】输入A、B两表的整数序列,整数之间用“,”号分开。
【输出形式】A>B输出1;A=B输出0;A<B输出-1。
【样例输入】
5 //该行为A表元素个数
2,3,4,10,15 //该行为A表数据
6 //该行为A表元素个数
2,3,4,21,12,27 //该行为A表数据
【样例输出】-1 //(表示A<B)
【样例说明】输入样例中,去掉前缀2,3,4 表A'为(10,15),表B'为(21,12,27)
【评分标准】
先仔细审题!
1.AB表都不为空——>比较子表A与子表B,谁的首元素小
2.AB表中存在空表,谁空谁小
#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
int a[100], b[100], x = 0, n,min=0,y = 0;
cin >> x;
for (int i = 0; i < x; i++)
{
cin >> a[i];
getchar();
}
//输入a顺序表
cin >> y;
for (int i = 0; i < y; i++)
{
cin >> b[i];
getchar();
}
//输入b顺序表
if (x > y)
min = y;
else
min = x;
//取a和b中最小值进行比较,在a[i]与b[i]之间有某一小值,则知比较结果
//循环结束后,若没有比较出来大小(标志点)说明ab中某表为空,对原AB表进行数量比较即可
int f = 0;
for (int i = 0; i < min; i++)
{
if (a[i] > b[i])
{
cout << "1" << endl; f = 1;
break;
}
if (a[i] < b[i])
{
cout << "-1" << endl; f=1;
break;
}
}
if (f == 0) //说明存在空表 进行数量比较
{
if (x == y) //两个表的元素数量相同,都为相同项,则说明子表都为空
cout << "0" << endl;
else if(x>y)
cout << "1" << endl;
else
cout << "-1" << endl;
}
return 0;
}