杭电ACM1166

//杭电ACM敌兵布阵问题
//用链表的方法实现
//链表使用数组实现的
#ifndef LIST_H_
#define LIST_H_
const int MAX_LIST=5000;
typedef int ListType;
class List
{
public:
	List();
	bool isEmpty()const;
	int getLength()const;
	void insert(int index,ListType newItem);
	void show()const;
	void Add(int i,int j);
	void Sub(int i,int j);
	void Query(int i,int j);//i<j
	void End()const;
private:
	ListType items[MAX_LIST];
	int size;
	int translate(int ine) const;
};
#endif
#include"2.h"
#include<iostream>
List::List():size(0) {}
bool List::isEmpty()const
{
	return size==0;
}
int List::getLength()const
{
	return size;
}
void List::insert(int index,ListType newItem)
{
	for(int i=size;i>=index;i--)
		items[translate(i+1)]=items[translate(i)];
	items[translate(index)]=newItem;
	++size;
}
int List::translate(int ine) const
{
	return ine-1;
}
void List::show()const
{
	using std::cout;
	for(int i=0;i<size;i++)
		cout<<items[i]<<' ';
}
void List::Add(int i,int j)//i和j为正整数,表示第i个营地增加j个人(j不超过30)
{
	items[translate(i)]=items[translate(i)]+j;
}
void List::Sub(int i,int j)//i和j为正整数,表示第i个营地减少j个人(j不超过30)
{
	items[translate(i)]=items[translate(i)]-j;
}
void List::Query(int i,int j)//i和j为正整数,i<=j,表示询问第i到第j个营地的总人数
{
	using std::cout;
	int sum=0;
	for(int m=translate(i);m<=translate(j);m++)
		sum=sum+items[m];
	cout<<sum<<std::endl;
}
void List::End()const
{
	std::cout<<"End"<<std::endl;
}
#include"2.h"
#include<iostream>
int main()
{
	using namespace std;
	List list;
	int count=0;
	int people=0;
	cout<<"输入营地的个数: ";
	cin>>count;
	cout<<endl<<"输入各个营地的初始人数 ";
	for(int i=0;i<count;i++)
	{
		cin>>people;
		list.insert(i+1,people);
	}
	list.Query(1,3);
	list.Add(3,6);
	list.Query(2,7);
	list.Sub(10,2);
	list.Add(6,3);
	list.Query(3,10);
	list.End();
	return 0;
}


   

你可能感兴趣的:(杭电ACM1166)