/************************************************************************/
/*
2013-8-29华为机考 第三题,这个由于是最后一题,会比较难点;前面两题比较简单的
给定两个字符串,设定每个字符的权值(1-26),字母大小写一样,求出两字符串的
最大差值;
思路:先去相同的字母,然后分别两个字符串map<char,int,greater<>>,
长串是sum1,求出最大sum1和最小sum2,max=sum1-sum2就是答案了。
author 2013-8-29-15:00
*/
/************************************************************************/
#include <iostream>
#include <map>
#include <set>
#include <iterator>
using namespace std;
char s1[300];
char s2[300];
void Max_large_diff(char *s1,char *s2,int len2)
{
int i,j,k;
char temp;
int sum1,sum2;
int sum=0;
int finish=0;
map<char,int,greater<int>>map_char1;
map<char,int,greater<int>>map_char2;
map<char,int,greater<int>>::iterator it;
sum1=0;
sum2=0;
for(i=0;s1[i]!=0;i++)
{
temp =s1[i];
for(j=0;s2[j]!=0 && finish!=len2;j++)
{
if(tolower(temp) == tolower(s2[j]))
{
s1[i]=-1;
s2[j]=-1;
finish++;
break;
}
}
}
for (i =0;s1[i]!=0;i++)
if(s1[i]!=-1)
map_char1[s1[i]]++;
for(i =0;s2[i]!=0;i++)
if(s2[i]!=-1)
map_char2[s2[i]]++;
it = map_char1.begin();
k=26;
for(;it!=map_char1.end();it++)
{
sum1 = sum1 + (*it).second *k ;
k--;
}
k = 1;
it = map_char2.begin();
for(;it!=map_char2.end();it++)
{
sum2 = sum2 + (*it).second *k;
k++;
}
sum = sum1 - sum2;
printf("%d\n",sum);
}
int main()
{
while(scanf("%s",s1)!=EOF)
{
scanf("%s",s2);
int n1= strlen(s1);
int n2 = strlen(s2);
if(n1 >= n2)
{
Max_large_diff(s1,s2,n2);
}
else
<pre name="code" class="cpp">/************************************************************************/
/*
2013-8-29华为机考 第二题,一堆人按顺序报数,报到N,就出列,继续,问最后一个出列的是多少?直接模拟游戏,得出结果!
author 2013-8-29-15:00
*/
/************************************************************************/
#include <iostream>
using namespace std;
int main()
{
int s[100];
int N,i,j;
int number;
int last_N;
int count_N;
while(scanf("%d",&N)!=EOF)
{
memset(s,0,sizeof(s));
count_N =0;
j = 0;
if(N==1)
{
printf("1\n");
continue;
}
while(1)
{
count_N++;
j++;
if(j==(N+1))
j=1;
while(s[j]!=0)
{
j++;
if(j==(N+1))
j=1;
}
if(count_N %3==0)
{
s[j] = 1;
number = 0;
for(int i=1;i<=N;i++)
{
if(s[i]==0)
{
number++;
last_N = i;
}
}
if(number ==1)
{
printf("%d\n",last_N);
break;
}
count_N=0;
}
}
}
return 0;
}
{Max_large_diff(s2,s1,n1);}}return 0;}
/************************************************************************/
/*
2013-8-29华为机考 第一题,字符串的大小写转化,相当简单!
author 2013-8-29-15:00
*/
/************************************************************************/
#include <iostream>
using namespace std;
int main()
{
char s[1000];
int n;
while(scanf("%s",s)!=EOF)
{
for(n =0;s[n]!=0;n++)
{
if(s[n]>='a' && s[n]<='z')
s[n] = s[n] - ('a'-'A');
else if(s[n]>='A' && s[n]<='Z')
s[n] = s[n] + ('a'-'A');
}
printf("%s\n",s);
}
return 0;
}