寒假第二天--线性表--多项式求和

多项式求和

Time Limit: 1000MS Memory limit: 65536K

题目描述

多项式描述如下:
1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 ……
先请你求出多项式前n项的和。

输入

第一行输入一个数T代表测试数据个数(T<=1000)。接下来T行每行1个数代表n(0<=n< 2^31)。
 

输出

 对于每个输入样例,输出多项式和的结果(结果精确到小数点后两位)。每行输出一个结果。

示例输入

2
1
2

示例输出

1.00
0.50 

提示

 

来源

  中国海洋大学第三届“朗讯杯”编程比赛高级组试题

示例程序
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int i , j , n , m , sign = 1 ;
    double sum ;
    scanf("%d", &n);
    for(i =1 ; i<= n ; i++)
    {
        scanf("%d", &m);
        if(m > 150) m = 150;
        sum = 0; sign = 1 ;
        for(j = 1 ; j <= m ; j++)
        {
            sum += sign*(1.0/j) ;
            sign = -sign ;
        }
        printf("%.2lf\n", sum);
    }
}

在C++中,我们可以创建一个简单的顺序表(数组实现),用于实现上述功能。这里是一个简化的例子: ```cpp #include <iostream> class SequentialList { private: int* data; // 存储数据的指针 int size; // 线性表当前元素个数 int capacity; // 容量 public: SequentialList(int initialCapacity = 5) { data = new int[initialCapacity]; capacity = initialCapacity; size = 0; } ~SequentialList() { // 析构函数,防止内存泄漏 delete[] data; } // 判断线性表是否为空 bool isEmpty() const { return size == 0; } // 求线性表长度 int length() const { return size; } // 获取指定位置的元素 (索引从0开始) int get(int index) const { if (index >= 0 && index < size) { return data[index]; } throw std::out_of_range("Index out of range"); } // 求前驱 (返回值为-1,因为顺序表无前驱节点) int predecessor(int index) const { if (index > 0) { return get(index - 1); } else { return -1; } } // 求后继 (返回值为-1,因为顺序表无后继节点) int successor(int index) const { if (index < size - 1) { return get(index + 1); } else { return -1; } } // 在指定位置插入元素 void insertAt(int index, int value) { if (index < 0 || index > size) { throw std::out_of_range("Invalid insertion index"); } if (size == capacity) { resize(capacity * 2); // 当满时扩大容量 } for (int i = size; i > index; --i) { data[i] = data[i - 1]; } data[index] = value; ++size; } // 删除指定位置的元素 void removeAt(int index) { if (index < 0 || index >= size) { throw std::out_of_range("Invalid removal index"); } for (int i = index; i < size - 1; ++i) { data[i] = data[i + 1]; } --size; } // 显示线性表 void display() const { for (int i = 0; i < size; ++i) { std::cout << "Element at index " << i << ": " << data[i] << " "; } std::cout << "\n"; } // 清空线性表 void clear() { for (int i = 0; i < size; ++i) { data[i] = 0; } size = 0; } // 输入负数退出程序 static void inputExit() { std::cin >> size; if (size < 0) { exit(0); // 使用系统退出,终止程序 } } }; int main() { SequentialList list; list.inputExit(); // 调用各个方法... // ... list.clear(); // 清空线性表 list.display(); // 显示线性表 return 0; } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值