zoukankan      html  css  js  c++  java
  • 学堂在线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;
    }
  • 相关阅读:
    17.1.2.1 Advantages and Disadvantages of Statement-Based and Row-Based Replication
    17.1.2 Replication Formats
    Setting the Master Configuration on the Slave
    17.1.1.9 Introducing Additional Slaves to an Existing Replication Environment
    17.1.1.8 Setting Up Replication with Existing Data
    17.1.1.7 Setting Up Replication with New Master and Slaves
    17.1.1.6 Creating a Data Snapshot Using Raw Data Files
    列出display的值,并说明它们的作用
    CSS设置DIV居中
    CSS选择符有哪些?哪些属性可以继承?优先级算法如何计算?
  • 原文地址:https://www.cnblogs.com/Konayuki2015/p/4520478.html
Copyright © 2011-2022 走看看