//杭电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
最新推荐文章于 2020-02-27 13:00:14 发布