学堂在线TsinghuaX: 00740043_2X C++语言程序设计进阶 第六章Lab

第一题:最大子数组和

题目描述

给定一个数组a[0,...,n-1],求其最大子数组(长度>=1)和

输入描述

第一行一个整数n(1<=n<=5000),然后依次输入n个整数(每个整数范围[-5000, 5000])

输出描述

输出一个整数表示最大子数组和

样例输入

5
1 -1 1 1 -1

样例输出

2
#include<stdio.h>
int maxSum(int *a,int n)
{
    int max=-1;
    int i,j,sum;
    for(i=0;i<n;i++)
    {
        sum=0;
        for(j=i;j<n;j++)
        {
            sum+=a[j];
            if(sum>max)
                max=sum;
        }
    }
    return max;
}
int main(int argc,const char *argv[])
{
    int len;
    scanf("%d",&len);
    int i,a[len];
    for(i=0;i<len;i++)
        scanf("%d",&a[i]);
    printf("%d",maxSum(a,len));
    return 0;
}

第二题:字符串的回文子序列个数

题目描述

求一个长度不超过15的字符串的回文子序列个数(子序列长度>=1)。

输入描述

输入一个长度不超过15的字符串,字符串均由小写字母表示

输出描述

输出其回文子序列个数

样例输入

abaa

样例输出

10

注释

本例中其所有回文子序列为:
a,b,a,a,aba,aba,aa,aa,aa,aaa 
一个字符串的子序列是指在原字符串上去除某些字符但不破坏余下元素的相对位置(在前或在后)而形成的新字符串。

#include<string>
#include<iostream>
using namespace std;
string str, creat="";
int ans=0;
bool used[20]={false};
bool back_forward(string str)
{
    for (int i=0;i<str.length()/2;i++)
    {
        if (str[i]!=str[str.length()-i-1])
            return false;
    }
    return true;
}
void search(int len, int start)
{
    if(len<=0)
    {
        if(back_forward(creat))
            ans++;
        return;
    }
    for(int i = start;i<str.length();i++)
    {
        if(!used[i])
        {
            used[i]=true;
            creat.append(str,i,1);
            search(len-1,i+1);
            used[i]=false;
            creat.erase(creat.length()-1,1);
        }
    }
}
int main(int argc,const char *argv[])
{
    cin>>str;
    for(int i=1;i<=str.length();i++)
        search(i,0);
    cout<<ans;
    return 0;
}

第三题:数组第K小数

题目描述

给定一个整数数组a[0,...,n-1],求数组中第k小数

输入描述

首先输入数组长度n和k,其中1<=n<=5000, 1<=k<=n

然后输出n个整形元素,每个数的范围[1, 5000]

输出描述

该数组中第k小数

样例输入

4 2
1 2 3 4

样例输出

2
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
int main(int argc,const char *argv[])
{
    int n,k;
    cin >>n>>k;
    vector<int>a(n,0);
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
    }
    sort(a.begin(),a.end());
    cout<<a[k-1];
    return 0;
}

附加题:最大子数组和(加强版)

题目描述

给定一个数组a[0,...,n-1],求其最大子数组(长度>=1)和

输入描述

第一行一个整数n(1<=n<=100000),然后依次输入n个整数(每个整数范围[-5000, 5000])

输出描述

输出一个整数表示最大子数组和

样例输入

5
1 -1 1 1 -1

样例输出

2

注释

本题和Lab 6-1相比数组长度变大,对程序的运行效率要求更加严格。

#include<stdio.h>
int max(int x,int y)
{
    return (x>y)?x:y;
}
int maxSum(int *a,int n)
{
    int i;
    int nAll,nStart;
    nAll=a[n-1];
    nStart=a[n-1];
    for(i=n-2;i>=0;i--)
    {
        nStart=max(a[i],a[i]+nStart);
        nAll=max(nAll,nStart);
    }
    return nAll;
}
int main(int argc,const char *argv[])
{
    int len;
    scanf("%d",&len);
    int i,a[len];
    for(i=0;i<len;i++)
        scanf("%d",&a[i]);
    printf("%d",maxSum(a,len));
    return 0;
}
时间: 2024-12-26 04:24:16

学堂在线TsinghuaX: 00740043_2X C++语言程序设计进阶 第六章Lab的相关文章

学堂在线TsinghuaX: 00740043_2X C++语言程序设计进阶 第七章Lab

第一题:账户类 题目描述 定义一个基类Account,数据成员包含string类变量userName用于保存账户主人姓名,函数成员包括默认构造函数.带参构造函数用于初始化数据成员和输出姓名的成员函PrintName().从Account类派生出CreditAccount类,增加整型数据成员credit用于记录该用户信用额度,函数成员包括带参构造函数用于初始化数据成员和输出账户信息的成员函数PrintInfo().要求:在函数PrintInfo()中需要调用基类的成员函数PrintName().填

学堂在线TsinghuaX: 00740043_2X C++语言程序设计进阶 第八章Lab

第一题:复数加减乘除 题目描述 求两个复数的加减乘除. 要求使用c++ class编写程序.可以创建如下class #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; class Complex{ public: Complex(double r = 0.0, double i = 0.0): real(r), i

学堂在线TsinghuaX: 00740043X C++语言程序设计基础 第五章Lab

第一题:“鱼额宝” 题目描述 请实现一个“鱼额宝”类,下面已给出代码模板,请根据main函数中对该类的操作,补充类实现部分完成代码. “鱼额宝”类可以记录账户余额.存钱.取钱.计算利息.该类中有一个私有静态成员变量profitRate存储“鱼额宝”的利率,可以用共有静态成员函数setProfitRate修改利率的值.程序输入为第1天至第n天连续n天的账户操作,每天只能进行一次账户操作,或存或取,每一天产生的利息是前一天的账户余额与“鱼额宝”利率的乘积,产生的利息当天也将存入账户余额,由于第1天之

学堂在线TsinghuaX: 00740043X C++语言程序设计基础 第二章Lab

第一题:简单题目(求和,最大值,最小值) 题目描述 任意给定n个整数,求这n个整数序列的和.最小值.最大值 输入描述 输入一个整数n,代表接下来输入整数个数,n<=100,接着输入n个整数,整数用int表示即可. 输出描述 输出整数序列的和.最小值.最大值.用空格隔开,占一行 样例输入 21 2 样例输出 3 1 2 #include<iostream> using namespace std; int main() { int n,a,i,sum=0,min=0,max=0; cin&

网易云课堂_C语言程序设计进阶_第一周:数据类型:整数类型、浮点类型、枚举类型

C语言程序设计进阶_第一周:数据类型:整数类型.浮点类型.枚举类型 1.0数据类型 1.1整数类型 1.2浮点类型 1.3逻辑类型 1.4类型转换和条件运算 1.0数据类型 1 整数 char(%c), short, int(%d), long(%ld), long long(C99) 2 浮点数 float(%f), double(%lf), long double(C99) 3 逻辑 bool(C99) 4 指针 5 自定义类型 所表达的数的范围:char<short<int<flo

《javascript高级程序设计》第六章总结

6.1 理解对象 属性类型 属性特性 行为描述 数据属性 Configurable 表示是否能通过delete删除属性从而重新定义属性. 数据属性 Enumerable 表示能否通过for-in循环返回属性.对于直接在对象中定义的属性,默认为true 数据属性 Writable 表示是否可以修改属性的值. 数据属性 value 表示这个属性的内部值. 访问器属性 Configurable 表示是否能通过delete删除属性从而重新定义属性. 访问器属性 Enumerable 表示能否通过for-

网易云课堂_Java语言程序设计进阶_第1周 类和对象_1分数

第1周编程题 查看帮助 返回 温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提交答案,系统将取其中的最高分作为最终成绩. 第1周编程题.我们在题目说明中给出了一部分代码,你需要在这部分代码的基础上,按照题目说明编写代码,然后将两部分代码一起提交. 依照学术诚信条款,我保证此作业是本人独立完成的. 1 分数(10分) 题目内容: 设计一个表示分数的类Fraction.这个类用两个int类型的变量分别表示分子和分母. 这个类

网易云课堂_C语言程序设计进阶_第8周

8.2函数指针 8.3图形交互 8.2函数指针 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 void f(int i) 5 { 6 printf("void f(),%d\n", i); 7 } 8 9 void main() 10 { 11 void(*pf)(int) = f;//函数指针 12 13 pf(10); 14 15 (*pf)(20); 16 17 (pf)(30); 18 19 system(

网易云课堂_C语言程序设计进阶_第七周:文件:文件访问、格式化输入输出、二进制输入输出

格式化的输入输出 printf %[flags][width][.prec][hIL]type Flag 含义 - 左对齐 + 在前面放+或- (space) 正数留空 0 0填充 1 #include <stdio.h> 2 3 void main() 4 { 5 printf("%+9d\n", 123); 6 7 printf("%9d\n", 123); 8 9 printf("%-9d\n", 123); 10 11 pri