CG.DYJ-顺序表比较

【问题描述】设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;
}

上一篇:计算几何 点积叉积 点类模板


下一篇:P1161 开灯