while True:
try:
dic={}
def mycmp(s):
res=0
p=-1
s=s.upper()
for c in s:
res+=dic[c]*p
p/=100
return res
pri=input()
for i,c in enumerate(pri):
dic[c]=i+1
letters=list(input().split())
letters.sort(key=mycmp, reverse=True)
print(” “.join(letters))
except:
break
这题数据不准啊
字符串后面要留位置给‘\0’啊,所以要多一个,应该开21[em:13]
include
include
include
include
int p[26];
int cmp(const void a,const void b)
{
char s1,s2;char ch1,ch2;
s1=(char )a;s2=(char )b;
while(s1&&s2)
{
ch1=(s1)>=’a’?s1-32:s1; //转换为大写字母
ch2=(s2)>=’a’?s2-32:s2; //转换为大写字母
if(p[ch1-‘A’]!=p[ch2-‘A’]) //按字母顺序表比较字母
return p[ch1-‘A’]-p[ch2-‘A’];
else {s1++;s2++;}
}
if(*s1==0) return -1;
else return 1;
}
int main()
{
char s[27];
int i,j,count;
while(scanf(“%s\n”,s)!=EOF)
{
for(i=0; i<26; i++)
p[s[i]-‘A’]=i;
char str[2200];
char a[100][50];
gets(str);
count=0; i=0;
while(1)
{ j=0;
while(str[i]!=’ ‘&&str[i])
{
a[count][j++]=str[i++];
}
a[count][j]=’\0’;
count++;
if(!str[i]) break; else i++;
}
qsort(a,count,sizeof(a[0]),cmp);
}
我的想法是给每个字符串都定制一个「排序用字符串」,这个字符串的字符值是对应位置文本的顺位。
唉,再吐糟一下!C++ 的
stringstream
有没有轻量只读的版本啊 Orz。fire firefox
这道题有一个没说完整的
IN:***
f fff ff ffff
OUT必须是f ff fff ffff
否则不行
这题数据不准啊
说好单词长度不超过20的
开了20的字符串
wa了一个小时
改到30 过了[em:02]
在linux系统下,strupr函数不能直接调用……需要自己定义……
额滴神~就因为这!编译错误好久……
fire firefox
\0和f比?题目没说清楚!??
[em:07][em:07]
while True:
try:
dic={}
def mycmp(s):
res=0
p=-1
s=s.upper()
for c in s:
res+=dic[c]*p
p/=100
return res
pri=input()
for i,c in enumerate(pri):
dic[c]=i+1
letters=list(input().split())
letters.sort(key=mycmp, reverse=True)
print(” “.join(letters))
except:
break
好