| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 511 人关注过本帖
标题:大神帮忙看一看c++的程序:最大特征值
只看楼主 加入收藏
a344304180
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2013-1-3
结帖率:0
收藏
 问题点数:0 回复次数:4 
大神帮忙看一看c++的程序:最大特征值

Description:
大写字母A-Z分别对应整数[-13,12],因此,一个字符串对应了一个整数列。我们把字符串对应的整数列的和称为该字符串的特性值。例如:字符串ACM对应的整数列为{-13,-11,-1},则ACM的特性值为(-13)+(-11)+(-1)=-25;其子串AC的特性值为-24;子串M的特性值为-1。 给你一个字符串,请找出该字符串的所有子串的最大特性值。
 

Input:
第一行的正整数 N(1<=N<=1000)表示其后有N组测试数据,每组测试数据都由一个字符串组成。字符串只能由大写字母A-Z组成,且字符串的长度不会超过1000。
Output:
输出有N行,每行是一组测试数据的输出结果。
Sample Input:
2
ACM
ANGRY

 Sample Output:
-1
15

本人编写:
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main()

{
    int n,z=0;
    char t='A';
    vector<int>f;
    string a;
    cin>>n;
    for(int i=1; i<=n; i++)
    {
        cin>>a;
        for(int j=0; j<a.size(); j++)
        {
            if(a[j]<='N')
            {
                if(a[j]>t)
                t=a[j];
            }
            else
            {
                z=j+1;
                break;
            }
        }
        if(z==0)
        cout<<t-78<<"\n";
        else
        {
            char temp,temp1,temp2='A'-78;
            z=z-1;
            for(;z<a.size();z++)
            {
                if(a[z]>'N')
                f.push_back(z);
            }
            for(int x=0; x<f.size(); x++)
            {
                for(int y=x+1; y<=f.size(); y++)
                {
                    int sum=0;
                    for(int w=f[x]+1; w<=f[y]; w++)
                        sum+=(a[w]-78);
                        if(sum>0)
                        {
                            temp1=a[f[x]]-78+sum;
                            if(temp1>temp2)
                                temp2=temp1;

                        }
                }
            }
            cout<<temp2-1+1<<"\n";
        }
    }
    return 0;
}
不能AC,问题出在哪里?更简洁的解法?还有最后字符ASCII码怎么表示??
搜索更多相关主题的帖子: 测试 正整数 字符串 
2013-01-20 16:11
qq535263284
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-1-20
收藏
得分:0 
加油
2013-01-20 18:12
milantgh
Rank: 2
等 级:论坛游民
帖 子:13
专家分:10
注 册:2013-1-20
收藏
得分:0 
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main()

{
    int n,z=0;
    char t='A';
    vector<int>f;
    string a;
    cin>>n;
    for(int i=1; i<=n; i++)
    {
        cin>>a;
        for(int j=0; j<a.size(); j++)
        {
            if(a[j]<='N')
            {
                if(a[j]>t)
                t=a[j];
            }
            else
            {
                z=j+1;
                break;
            }
        }
        if(z==0)
        cout<<t-78<<"\n";
        else
        {
            char temp1,temp2='A'-78;
            z=z-1;
            for(;z<a.size();z++)
            {
                if(a[z]>'N')
                f.push_back(z);
            }
            for(int x=0; x<f.size(); x++)
            {
                for(int y=x+1; y<=f.size(); y++)
                {
                    int sum=0;
                    for(int w=f[x]+1; w<=f[y]; w++)
                        sum+=(a[w]-78);
                        if(sum>0)
                        {
                            temp1=a[f[x]]-78+sum;
                            if(temp1>temp2)
                                temp2=temp1;

                        }
                }
            }
            cout<<temp2-1+1<<"\n";
        }
    }
    return 0;
2013-01-20 20:14
milantgh
Rank: 2
等 级:论坛游民
帖 子:13
专家分:10
注 册:2013-1-20
收藏
得分:0 
这样就可以了!!!
2013-01-20 20:15
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
貌似就是最大子串和问题吧,多了一个字母转数字的过程。
这里有解释:http://blog.
2013-01-21 17:07
快速回复:大神帮忙看一看c++的程序:最大特征值
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.056612 second(s), 7 queries.
Copyright©2004-2021, BCCN.NET, All Rights Reserved