这道题很坑很坑
- 坑点一 第一个值的范围是 “A" 到 “G” 因为星期最大是 7,不能用isupper()。
- 坑点二 第二个值的范围是 “A" 到 “N” 或 " 0" 到 " 9 " (不能用isupper()和isdigit() ),且第二个的位置在第一个的后面 ,而且第二个相等的必须是大写字母,小写字母就算相等也不能输出但是题目也没说,我加上判断的小写就是过不了,
- 坑点三 输出的时候个位数要补零,二位数不用。
- 坑点四 最坑的就是它的位置也是一一对应的,且字母相等。
学习
for循环可以有两个截止条件。
for(int i=0;i<a.length()&&i<b.length();i++){}
#include<iostream>
using namespace std;
int main(){
string day[7]={"MON","TUE","WED","THU","FRI","SAT","SUN"};
string a,b,c,d;
cin>>a>>b>>c>>d;
char flag;//写笔记string[i]是char
int count;
for(int i=0;i<a.length()&&i<b.length();i++){
if(a[i]==b[i]&&a[i]>='A'&&a[i]<='G'){
cout<<day[a[i]-'A']<<" ";
count=i;
break;
}
}
for(int i=0;i<a.length()&&i<b.length();i++){
if(a[i]==b[i]&&i>count){
if(isdigit(a[i])){
printf("%02d",a[i]-'0');
cout<<":";
break;
}else{
if(a[i]>='A'&&a[i]<='N'){//又是一个坑
printf("%02d",(a[i]-'A')+10);
cout<<":";
break;
}
}
}
}
for(int i=0;i<c.length()&&i<d.length();i++){
if(c[i]==d[i]&&((c[i]>='a'&&c[i]<='z')||(c[i]>='A'&&c[i]<='Z'))){//这是个坑啊,草
printf("%02d",i);//打印字符怎么打
break;
}
}
return 0;
}
三刷代码
注意坑点
#include<iostream>
using namespace std;
int main(){
string day[7]={"MON","TUE","WED","THU","FRI","SAT","SUN"};
string a,b,c,d;
cin>>a>>b>>c>>d;
int flag=0;
for(int i=0;i<a.size()&&i<b.size();i++){
if(a[i]==b[i]&&a[i]>='A'&&a[i]<='G') {
cout<<day[a[i]-'A']<<" ";
flag=i;
break;
}
}
for(int i=flag+1;i<a.size()&&i<b.size();i++){
if(a[i]==b[i]) {
if(a[i]>='A'&&a[i]<='N'){
cout<<a[i]-'A'+10<<":";
break;
}else if(a[i]>='0'&&a[i]<='9') {printf("%02d:",a[i]-'0');break;}
}
}
for(int i=0;i<c.size()&&i<d.size();i++){
if(c[i]==d[i]&&isalpha(c[i])){
printf("%02d",i);
break;
}
}
return 0;
}
二刷代码
#include<iostream>
using namespace std;
int main(){
string day[7]={"MON","TUE","WED","THU","FRI","SAT","SUN"};
string a,b,c,d;
cin>>a>>b>>c>>d;
int slen=(a.length()>b.length()) ? a.length() : b.length();
int flag=0;
for(int i=0;i<slen;i++){
if(a[i]==b[i]&&a[i]>='A'&&a[i]<='G'){//D怎么办?减去A吗???
cout<<day[a[i]-'A']<<" ";
flag=i;
break;
}
}
for(int i=flag+1;i<slen;i++){
if(a[i]==b[i]&&a[i]>='0'&&a[i]<='9') {printf("%02d",a[i]-'0');break;}
else if(a[i]==b[i]&&a[i]>='A'&&a[i]<='N'){cout<<a[i]-'A'+10;break;}
}
int slense=(c.length()>d.length()) ? c.length() : d.length();
for(int i=0;i<slense;i++){
if(c[i]==d[i]&&isalpha(c[i])){
cout<<":";
printf("%02d",i);
break;
}
}
return 0;
}
第一次代码:
#include<iostream>
using namespace std;
int main(){
string day[7]={"MON","TUE","WED","THU","FRI","SAT","SUN"};
string a,b,c,d;
cin>>a>>b>>c>>d;
char flag;//写笔记string[i]是char
int count;
for(int i=0;i<a.length()&&i<b.length();i++){
if(a[i]==b[i]&&a[i]>='A'&&a[i]<='G'){
cout<<day[a[i]-'A']<<" ";
count=i;
break;
}
}
for(int i=0;i<a.length()&&i<b.length();i++){
if(a[i]==b[i]&&i>count){
if(isdigit(a[i])){
printf("%02d",a[i]-'0');
cout<<":";
break;
}else{
if(a[i]>='a'&&a[i]<='n'){//tm的你也不说一声。坑逼
printf("%02d",(a[i]-'a')+10);
cout<<":";
break;
}else if(a[i]>='A'&&a[i]<='N'){//又是一个坑
printf("%02d",(a[i]-'A')+10);
cout<<":";
break;}
}
}
}
for(int i=0;i<c.length()&&i<d.length();i++){
if(c[i]==d[i]&&((c[i]>='a'&&c[i]<='z')||(c[i]>='A'&&c[i]<='Z'))){//这是个坑啊,草
printf("%02d",i);//打印字符怎么打
break;
}
}
return 0;
}
总是有一个点过不去,tm的服了
通过三刷,找到了这个测试点的问题,只要删除
if(a[i]>='a'&&a[i]<='n'){//tm的你也不说一声。坑逼
printf("%02d",(a[i]-'a')+10);
cout<<":";
break;
}else
就可以了AC了