2 u010606441 u010606441 于 2013.12.08 10:58 提问

庞果的字符串完美度的问题,用C++编的

题目:
我们要给每个字母配一个1-26之间的整数,具体怎么分配由你决定,但不同字母的完美度不同,
而一个字符串的完美度等于它里面所有字母的完美度之和,且不在乎字母大小写,也就是说字母F和f的完美度是一样的。
现在给定一个字符串,输出它的最大可能的完美度。
例如:dad,你可以将26分配给d,25分配给a,这样整个字符串最大可能的完美度为77。

疑问:
程序里面我注意到存在其它字符还有大小写的问题,可提交后测试用例还是不对,不知道是哪里错了,还请帮忙指出
bool IsRange(char a)
{
if(('a'<=a&&a<='z')||('A'<=a&&a<='Z'))
return 1;
return 0;

}

bool IsEqual(char a,char b)
{
int num='A'-'a';
if(a-b==num||b-a==num)
return 1;
else
return 0;
}

void sort(int *a) //出现的次数升序
{
while(*a!=0)
{
int *p=a;
while(*p!=0)
{
p++;
if(*p>*a)
{
int temp;
temp=*a;
*a=*p;
*p=temp;

}
}
a++;
}
}

bool IsApp(char *q,char a) //1-存在,0—不存在
{
while(*q!='\0')
{
if(*q==a||IsEqual(*q,a))
return 1;
q++;
}
return 0;
}

int perfect(const string &s)
{
int count,sum=0,i=0,j=0;
int WordAppNub[26]={0}; //存放字母出现的次数
char WordApp[26]={'0'}; //存放出现过的字母
int Num[26]; //完美值1—26
const char *p=&s[0];
for(int i=26;i>0;i--)
{
Num [26-i]=i;
}

while(*p!='\0')
{
    count=0;
    while((*p!='\0')&&(IsApp (WordApp ,*p)||(!IsRange (*p))))
    {
        p++; 
    }
    if(*p!='\0'&&(!IsApp (WordApp ,*p)))
    {
    const char *q=p;
    while(*q!='\0')
    {
        if(*p==*q||IsEqual (*p,*q))
        {
            count++;
            q++;
        } 
        else
            q++;
     }
        WordAppNub[i++]=count;
        WordApp[j++]=*p;
        p++;
    }
}

sort(WordAppNub);
for(int i=0;i<26;i++)
{
    sum+=WordAppNub [i]*Num[i];
}   
/*for(int i=0;i<26;i++)
{
    int WordAppNub[26]={0};    
    char WordApp[26]={'0'}; 
}*/
return sum;

}

int _tmain(int argc, _TCHAR* argv[])
{
int SumNub;
const string a="24a5b6e 5d8d c7A24 44F8F6D42f33f42D99tF45f24C56f58fe86BF25ad25B36db42b";
SumNub=perfect (a);
cout<<SumNub<<endl;
system("pause");
return 0;
}

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!