题目:
https://acm.hdu.edu.cn/showproblem.php?pid=2008
解答:
#include <iostream>
using namespace std;
#define SLDataType double
struct Sequlist{
SLDataType* array;
int size;
int capacity;
};
//********************顺序表初始化***********/
void InitSequlist(Sequlist* sl, int capacity) {
sl->array = new SLDataType[capacity];
sl->size = 0;
sl->capacity = capacity;
}
//********************顺序表销毁************/
void DestorySequlist(Sequlist* sl) {
delete[] sl->array;
}
//**********************获取顺序表长度******//
int GetSequlistLength(Sequlist* sl) {
return sl->size;
}
//**********************判断顺序表是否为空***//
bool SequlistEmpty(Sequlist* sl) {
return sl->size == 0;
}
//***************顺序表的插入********** */
void insertSequlist(Sequlist* sl, int pos, SLDataType x) {
//判断pos是否合法
if(pos < 0 || pos > sl->size){
printf("插入位置不合法\n");
}
//判断是否需要增容
if(sl->size == sl->capacity){
int newCapacity = sl->capacity * 2;
SLDataType* newArry = new SLDataType[newCapacity];
for(int i = 0;i < sl->size;i++){
newArry[i] = sl->array[i];
}
delete[] sl->array;
sl->array = newArry;
sl->capacity = newCapacity;
}
//往后挪数据
for (int i = sl->size; i > pos; i--)
{
sl->array[i] = sl->array[i-1];
}
//插入数据
sl->array[pos] = x;
//更新大小
sl->size++;
}
//***************************顺序表的删除元素 */
void deleteSequlist(Sequlist* sl, int pos){
//判断pos是否合法
if(pos < 0 || pos > sl->size){
printf("插入位置不合法\n");
}
//删除元素
for(int i = pos;i < sl->size;i++){
sl->array[i] = sl->array[i+1];
}
//更新大小
sl->size--;
}
//**************************顺序表查找元素下标索引 */
int findSequlistIndex(Sequlist* sl, int x){
for (int i = 0; i < sl->size; i++)
{
if (sl->array[i] == x)
{
return i;
}
}
return -1;
}
//************************顺序表查找元素 */
double getSequlist(Sequlist* sl, int pos){
//判断pos是否合法
if(pos < 0 || pos > sl->size){
printf("插入位置不合法\n");
}
//得到元素
return sl->array[pos];
}
//***********************更新数据********//
void updateSequlist(Sequlist* sl, int pos, SLDataType x){
//判断pos是否合法
if(pos < 0 || pos > sl->size){
printf("插入位置不合法\n");
}
//更新元素
sl->array[pos] = x;
}
int main()
{
int n;
while(cin>>n && n){
Sequlist sl;
InitSequlist(&sl,1);
for (int i = 0; i < n; i++)
{
double x;
cin>>x;
insertSequlist(&sl,i,x);
}
int cnt1 = 0,cnt2 = 0,cnt3 = 0;
for (int i = 0; i < sl.size; i++)
{
double y;
y = getSequlist(&sl,i);
if (y>0)
{
cnt1++;
}else if(y<0){
cnt2++;
}else{
cnt3++;
}
}
cout<<cnt2<<" "<<cnt3<<" "<<cnt1<<endl;
}
return 0;
}