UVA333 题解
大意:
给定一个字符串
-
由数字,
-和大写英文数字X,空格组成,X代表10 且只能在最后出现。 -
依次相加前面的数字的总和可以被
11 整除,也就是前缀和,而且刚好s 只有10 个数字。
坑点:
\r换行与空格。
你写完代码在洛谷IDE运行时,你会发现莫名换行,这是因为 getline 把样例中的 \r 读入,才会换行,不要想办法改正常,会错!在本地测即可。
- 前后多余空格。
需要写一个函数来把前后多余空格给删除。
string& getstr(string &s){
//来自chatGPT。
if(s.empty()) return s;
s.erase(0,s.find_first_not_of(" "));
s.erase(s.find_last_not_of(" ")+1);
return s;
}
虽然来自 chatGPT,但是来说一下原理是什么。
-
s.empty()判断字符串s 是否为空。 -
s.erase()删除该位置的字符。 -
s.find_first_not_of(" ")字符串中第1 出现的空格。 -
s.find_last_not_of(" ")字符串中第最后一个出现的空格。
思路:
照着题面意思写即可。
- 若干个字符串输入。
while(getline(cin,s));
- 判断函数。
int q,w,sz;
q=w=sz=0;
for(int i=0;i<s.size();i++){
if(s[i]>='0'&&s[i]<='9'){
q+=s[i]-'0';//数字 前缀和
w+=q;
sz++;
}else if(s[i]=='X'){
if(sz!=9){
return false;//X 不是最后一个
}
q+=10;
w+=q;
sz++;
}else if(s[i]!='-'&&s[i]!=' '){
return false;//其他字符
}
}
if(w%11==0&&sz==10){
return true;
}else{
return false;
}
代码:
思路很详细了,坑点已经列出来了,代码就不放了。