B1014刷题

题目

B1014刷题_第1张图片

思路:

  1. 二维数组记录日期以便输出
  2. 输入的字符串相同的字符,是指相同位置的字符相同,即a[i]==b[i]。我一开始理解为非相同位置的第一对相同字符。做出来代码量很大,且不对。 (对题目理解很关键)
    附上不完整的代码思路(不正确):
#include 
using namespace std;

int main (){
	string a,b,c,d;
	char week[7][5]={"MON","TUE","WED","THU","FRI","SAT","SUN"};//切记,字符串长度需要+1 
	cin>>a>>b;
	
	bool daxie[24]={0};                                       //输出日期   
	bool zifu[25]={0}; 
	for(int i=0;i<a.length();i++){
		if(a[i]>='A'&&a[i]<='Z') daxie[a[i]-'A']=1; 
	}
	int pos;//记录第一对相同大写字母位置 
	for(int i=0;i<b.length();i++){
		if(b[i]>='A'&&b[i]<='Z'&&daxie[b[i]-'A']==1) {
			cout<<week[b[i]-'A']<<' ';
			pos=i; 
			break;
		}
	}
	for(int i=0;i<=a.length();i++){                           //输出小时 
		if(a[i]>='A'&&a[i]<='N') {
			zifu[a[i]-'A'+9]=1;	
		} 
		else if(a[i]>='0'&&a[i]<='9') zifu[a[i]-'0']=1;
	}	
	for(int i=0;i<=b.length();i++){
		if(b[i]>='A'&&b[i]<='N') {
			if(zifu[b[i]-'A'+9]==1&&i!=pos) cout<<setprecision(2)<<b[i]-'A'+9<<':';
			break; 
		}
		else if(b[i]>='0'&&b[i]<='9'){
			if(zifu[b[i]-'0']==1&&i!=pos) cout<<setprecision(2)<<b[i]-'0'<<':';
			break; 
		}
	}	
} 

AC代码:

#include 
#include
using namespace std;

int main (){
	string a,b,c,d;
	char week[7][5]={"MON","TUE","WED","THU","FRI","SAT","SUN"};//切记,字符串长度需要+1 
	cin>>a>>b>>c>>d;
	int len1=a.length(),len2=b.length();
	int len3=c.length(),len4=d.length();
	int i;
	for(i=0;i<len1&&i<len2;i++){
		if(a[i]==b[i]){
			if(a[i]>='A'&&a[i]<='G'){
				cout<<week[a[i]-'A']<<' ';
				break;
			} 
		}
	}
	for(i++;i<len1&&i<len2;i++){
		if(a[i]==b[i]){
			if(a[i]>='0'&&a[i]<='9') {
				cout<<setfill('0')<<setw(2)<<a[i]-'0'<<':';	
				break;
			}
			if(a[i]>='A'&&a[i]<='N') {
				cout<<a[i]-'A'+10<<':';
				break;
			}				
		}
	}
	for(int i=0;i<len3&&i<len4;i++){
		if(c[i]==d[i]){
			if(c[i]>='A'&&c[i]<='Z'){
				cout<<setfill('0')<<setw(2)<<i;
				break;
			}
			else if(c[i]>='a'&&c[i]<='z'){
				cout<<setfill('0')<<setw(2)<<i;
				break;
			}
		}
	}

} 

备注:cin、cout的固定位数输出
1. 用流操作算子setfill,setw,setbase,setprecision
2. setw(int n)只是对直接跟在<<后的输出数据起作用,而在之后的<<需要在之前再一次使用setw
3. setfill(‘char x’)使用x来填充空下的空格
4. setprecision(int n)设置精度

2. 用成员函数:width(int n),precision(int n)

你可能感兴趣的:(PAT乙级)