藍橋杯練習系統 基礎練習(vip試題):BASIC-14、15 時間轉換、字符串對比

BASIC-14 時間轉換

題目信息

問題描述

 給定一個以秒爲單位的時間t,要求用“<H>:<M>:<S>”的格式來表示這個時間。<H>表示時間,<M>表示分鐘,而<S>表示秒,它們都是整數且沒有前導的“0”。例如,若t=0,則應輸出是“0:0:0”;若t=3661,則輸出“1:1:1”。

輸入格式

 輸入只有一行,是一個整數t(0<=t<=86399)。

輸出格式

 輸出只有一行,是以“<H>:<M>:<S>”的格式所表示的時間,不包括引號。

樣例輸入

0

樣例輸出

0:0:0

樣例輸入

5436

樣例輸出

1:30:36

解題思路

主要考察

 本題給出的考察關鍵字是:取餘、數字字符混合輸出。因爲C++在格式化輸出方面的語法比較複雜,所以在這裏我們可以直接使用printf()函數進行輸出,需要引入#include<cstdio>頭文件。

解題代碼

#include<iostream>
#include<cstdio>
using namespace std;

int main(){
	int t;
	cin>>t;
	printf("%d:%d:%d",t/3600,t%3600/60,t%60);
	return 0;
}

BASIC-15 字符串對比

題目信息

問題描述

 給定兩個僅由大寫字母或小寫字母組成的字符串(長度介於1到10之間),它們之間的關係是以下4中情況之一:
 1:兩個字符串長度不等。比如 Beijing 和 Hebei
 2:兩個字符串不僅長度相等,而且相應位置上的字符完全一致(區分大小寫),比如 Beijing 和 Beijing
 3:兩個字符串長度相等,相應位置上的字符僅在不區分大小寫的前提下才能達到完全一致(也就是說,它並不滿足情況2)。比如 beijing 和 BEIjing
 4:兩個字符串長度相等,但是即使是不區分大小寫也不能使這兩個字符串一致。比如 Beijing 和 Nanjing
 編程判斷輸入的兩個字符串之間的關係屬於這四類中的哪一類,給出所屬的類的編號。

輸入格式

 包括兩行,每行都是一個字符串

輸出格式

 僅有一個數字,表明這兩個字符串的關係編號

樣例輸入

 BEIjing
 beiJing

樣例輸出

 3

解題思路

主要考察

 本題給出的考察關鍵字是:字符串、大小寫。只要是考察了字符串的操作。在C++中我們可以直接使用<string>類庫對字符串進行操作,比如使用compare()比較兩個字符串是否相等,使用length()或者size()求字符串的長度,使用append()在字符串末尾添加一個字符等等。更加詳細的字符串操作請參考C++的api:string api詳解
compare()詳解length()詳解

解題思路

 我們直接根據題目要求寫就可以了。首先我們設置一個標誌位flag = 0,然後再判斷兩個字符串長度是否相等,如果不相等令flag = 1,如果相等flag自然還是爲0;接下來使用compare()函數判斷兩個字符串是否完全相等,如果相等則令flag = 2;再接下來判斷兩個字符串的長度是否相等,這裏要注意:如果兩個字符串完全相等,那麼長度自然也是相等的,那麼我們如何避免由於兩個字符串完全相等flag = 2後再因爲兩個字符串的長度相等而被重新賦值爲3呢?其實很簡單,我們只需要在判斷條件裏再加一個flag != 2就可以了。如果flag已經爲2了,那麼我們加上這個判斷條件之後就不會出現上述提到的問題了。然後進入第三個判斷後我們將兩個字符串統一標準,全部轉換爲大寫或者全部轉換爲小寫,然後我們再使用compare()判斷兩個字符串是否相等,如果此時相等了,那麼我們令flag = 3;接下來經過第三個判斷的轉換,如果兩個字符串長度相等,而且全都轉換爲小寫之後仍然不一樣,那麼令flag = 4;最後我們使判斷函數返回flag的最終結果即可。

解題代碼

#include<iostream>
#include<string>
using namespace std;

int judge(string s1,string s2){
	int flag = 0;
	//如果兩個字符串長度不相等 
	if(s1.length() != s2.length()){
		flag = 1;
	}
	//如果兩個字符串完全一樣 
	if(s1.compare(s2) == 0){
		flag = 2;
	}
	//如果兩個字符串長度相等,但是不完全一樣,那麼將這兩個字符串全部轉換爲小寫再比較 
	if(s1.length() == s2.length() && flag != 2){
		int len = s1.length();
		for(int i=0;i<len;i++){
			if(s1[i] >= 'A' && s1[i] <= 'Z'){
				s1[i] += 32; 
			}
			if(s2[i] >= 'A' && s2[i] <= 'Z'){
				s2[i] += 32; 
			}
		}
		//如果兩個字符串都轉換爲小寫之後完全一樣,那麼令flag = 3 
		if(s1.compare(s2) == 0){
			flag = 3;
		}
	}
	//如果兩個字符串長度相等,而且全都轉換爲小寫之後仍然不一樣,那麼令flag = 4  
	if(s1.size() == s2.size() && s1.compare(s2) != 0){
		flag = 4;
	}
	
	return flag;
}


int main(){
	string s1,s2;
	getline(cin,s1);
	getline(cin,s2);
	cout<<judge(s1,s2);
	return 0;	
} 

 以上就是對於這兩個題目的解題思路了。如果你覺得我的文章對你有用請點個贊支持一下吧,喜歡我寫的文章那麼請點個關注再走喲。如果此文章有錯誤或者有不同的見解歡迎評論或者私信。
贊
我是ACfun:一個成長中的程序猿,感謝大家的支持。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章