天天看點

藍橋杯C++練習系統全記錄

本文是在學校開題了練習系統之後,可以免費白嫖這個系統,然後根據這個系統的習題順序而寫的答案和個人解析。

目錄

基礎練習

十六進制轉八進制

十六進制轉十進制

十進制轉十六進制

特殊回文數

回文數

特殊的數字

楊輝三角形 

查找整數

數列特征

字母圖形

01字串

閏年判斷

圓的面積 

序列求和

Fibonacci數列

階層計算

高精度加法

Huffuman樹

2n皇後問題

報時助手

 回形取數

龜兔賽跑預測 

 晶片測試

FJ數列

Sine之舞

 數的讀法

分解質因素

字元串對比

時間轉換

基礎練習

十六進制轉八進制

思路:16進制轉2進制,2進制轉8進制。

注意事項:

16進制轉2可以利用一個數組,對16進制數相減得到二進制數。

2轉8利用哈希表是為了友善我們取3個二進制數構成一位8進制數之後,找到該8進制數是多少。

需要去掉最開始的0

#include<bits/stdc++.h>
using namespace std;
//定義16進制
string h[16] = { "0000","0001","0010","0011","0100","0101","0110","0111","1000","1001","1010","1011","1100","1101","1110","1111" };

unordered_map<string, char>u_map;

//16轉2
string fun16(string s) {
	string ans = "";
	int len = s.size();
	for (int i = 0; i < len; i++) {
		if (s[i] >= '0' && s[i] <= '9') {
			//判斷是0-9或者A-E。求得在16進制數組中的數,例如輸入字元串是2,得到0010
			ans += h[s[i] - '0'];
		}
		else {
			ans += h[s[i] - 'A' + 10];
		}
	}
	return ans;
}

//2轉8
string fun8(string s) {
	string ans = "";
	int len = s.size();
	//len的長度如果不滿足3,則需要補位,補位是在最前面補0
	if (!(len % 3 == 0)) {
		int a = 3 - (len % 3);
		while (a--)
		{
			s = '0' + s;
		}
	}
	//根據補0之後,每3位取一次
	for (int i = 0; i < len; i += 3) {
		ans += u_map[s.substr(i, 3)];
	}
	return ans;
}
//去第一位0
string fun0(string s) {
	//如果s是有非0的字元串,且第一位是0,例如八進制 043這種,則變為43
	while (s.size() && s[0] == '0') {
		s = s.substr(1);
	}
	return s;
}
int main() 
{
	//二進制和八進制轉換的map
	u_map["000"] = '0', u_map["001"] = '1', u_map["010"] = '2', u_map["011"] = '3', u_map["100"] = '4', u_map["101"] = '5', u_map["110"] = '6', u_map["111"] = '7';
	int n;
	cin >> n;
	for (int i = 0; i < n; i++) {
		string s;
		cin >> s;
		string temp1 = fun16(s);
		string temp2 = fun8(temp1);
		string ans = fun0(temp2);
		cout << ans << endl;
	}

	return 0;
}
           

十六進制轉十進制

思路:16進制每一位直接根據A=10,B=11進行轉換,然後利用pow根據位數求得結果。

注意事項:

16進制每一位的轉換根據switch轉換。

字元串從最高位開始,取pow的時候比較友善。

#include<iostream>
#include<math.h>
using namespace std;

int main()
{
	string str;
	int temp;
	cin >> str;
	long long sum = 0;
	int len = str.size() - 1;
    //通過周遊字元串擷取每一位,然後根據每一位去計算這個值
	for (int i = 0; i < str.size();i++) {
		switch (str[i])
		{
		case 'A': temp = 10; break;
		case 'B': temp = 11; break;
		case 'C': temp = 12; break;
		case 'D': temp = 13; break;
		case 'E': temp = 14; break;
		case 'F': temp = 15; break;
        // 針對數字0-9
		default: temp = str[i] - '0'; break;
		}
        //由于是從第一位開始的,是以是最高位,直接取pow
		sum += temp * pow(16, len);
		len -= 1;
	}
	cout << sum;
	return 0;

}
           

十進制轉十六進制

思路:對輸入資料進行模16,取得最低位,然後除16取得現在剩多少,再重複進行

注意事項:

取得最低位的時候是整型對16取模還是整型,此時需要根據一個數組對應把該值轉為十六進制對應的值。

#include<iostream>

using namespace std;

int main()
{
	char ans[10],k=0;
	char a[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
	long long int num;
	cin>>num;
	if(num==0){
		cout<<0<<endl;
	}else{
		while(num){
			ans[k++]=a[num%16];
			num /= 16;
		}
		for(int i=k-1;i>=0;i--){
			cout<<ans[i];
		}
	}
	return 0;

}
           

特殊回文數

思路:由于已經确定回文數最長就是6位數或者5位數。按6位數舉例,必須是abccba這種形式的數,那麼就可以判斷2*(a+b+c)=num,如果滿足則找到了回文數

注意事項:

1.輸出有兩種形式

#include<iostream>
using namespace std;

int main()
{
	int num;
	cin>>num;
	//5位數
	for(int i=1;i<=9;i++){
		for(int j=0; j<=9;j++){
			for(int k=0; k<=9;k++){
				if(2*(i+j)+k==num){
					cout<<i*10001+j*1010+k*100<<endl;
                    //cout<<i<<j<<k<<j<<i<<endl;
				}
			}
		}
	}
	//6位數
	for(int i=1;i<=9;i++){
		for(int j=0; j<=9;j++){
			for(int k=0; k<=9;k++){
				if(2*(i+j+k)==num){
					cout<<i*100001+j*10010+k*1100<<endl;
                    //cout<<i<<j<<k<<k<<j<<i<<endl;
				}
			}
		}
	}
	return 0;
}
           

回文數

思路:由于确定是4位整型,那麼隻需要周遊1000到9999.滿足abba形式即可

注意事項:

1.對資料進行除模運算求得每一位的值

2.判斷是不是回文數判斷滿不滿足abba

#include<iostream>
using namespace std;

int main()
{
	for(int i=1000;i<=9999;i++){
		int a = i /1000 % 10;
		int b = i / 100 % 10;
		int c = i / 10 % 10;
		int d = i % 10;
		if(a==d && b==c){
			cout<<a<<b<<c<<d<<endl;
		}
	}
	return 0;
}
           

特殊的數字

思路:周遊100-999,判斷滿足aaa+bbb+ccc=num

注意事項:

1.對每一位的數字采用除模取得

#include<iostream>
using namespace std;

int main()
{
	for(int i=100;i<=999;i++){
		int a= i / 100;
		int b = i / 10 % 10;
		int c = i % 10;
		if(a*a*a + b*b*b + c*c*c == i){
			cout<<i<<endl;
		}
	}
	return 0;
}
           

楊輝三角形 

思路:ans[a][a]一直為1,且第一列一直為1,其他ans[a][b]=ans[a-1][b-1]+ans[a-1][b]

注意事項:

1.兩個for循環的時候,i和j的設定是因為每一行數字都是1x1,2x2,nxn這種

#include<iostream>
using namespace std;

int main()
{
	int num;
	cin>>num;
	int ans[num][num];
	for(int i = 0; i < num; i++){
		for(int j = 0; j < i + 1; j++){
			if(j==i){
				ans[i][j]=1;
				cout<<"1 "<<endl;
			}
			else if(j==0){
				ans[i][j]=1;
				cout<<"1 ";
			}else{
				ans[i][j]=ans[i-1][j-1] + ans[i-1][j];
				cout<<ans[i][j]<<' ';
			}
		}
	}
	return 0;
}
           

查找整數

思路:插入元素,然後周遊

注意事項:

1.插入重複元素可以去掉節省空間複雜度

#include<iostream>

#include<algorithm>
using namespace std;

int main()
{
    int n, m,target, ans[1000];
    cin >> n;
    for (int i = 0; i < n; i++)
    {
        cin >> m;
        ans[i] = m;
    }

	cin >> target;

    for (int i = 0; i < n; i++)
    {
        if (ans[i] == target)
        {
            cout << i + 1;
            return 0;        
        }
    }
	  cout<<-1;
    return 0;
}
           

數列特征

思路:對數組排序即可得到最大最小

注意事項:

1.利用sort排序

2.利用accumulate求和,其頭檔案是numeric

#include<iostream>
#include<algorithm>
#include<numeric>
#include<vector>

using namespace std;

int main()
{
	int n, m;
	long int ans = 0;
	vector<int>vec;
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> m;
		vec.push_back(m);
	}
	sort(vec.begin(), vec.end());
	ans = accumulate(vec.begin(),vec.end(),0);
	cout << vec[n - 1] << endl;
	cout << vec[0] << endl;
	cout << ans  << endl;
	return 0;
}
           

字母圖形

思路:先取得第一行,然後按順序取後面行,每一行需要兩個判斷,一個是在上一行基礎上加1,一個是減1.

注意事項:

1.利用’A‘+1得到B

2.第一行求了之後,後續for不需要管第一行了

#include<iostream>
using namespace std;

int main()
{
    
    int n,m;
    cin>>n>>m;
	  char ans[26][26];
    for(int j=0;j<m;j++)
    {
      ans[0][j]='A'+j;           //先表示出第一行的各元素
    }
	//每次求一行
    for(int i=1;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
					if(i<=j){
            ans[i][j]=ans[i-1][j]-1;   
					}else{
						ans[i][j]=ans[i-1][j]+1;   
					}
         
        }
    }
		//輸出數組
		for(int i=0;i<n;i++){
			for(int j=0;j<m;j++){
				cout<<ans[i][j];
			}
			cout<<endl;
		}
	
	return 0;
}
           

01字串

思路:把10進制轉2進制,然後輸出

注意事項:

1.利用對2取模判斷是0還是1,得到每一位結果

2.對目前的結果長度判斷,在前面補零

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

string DecToBin(int n){
	string str[2]={"0","1"};
	string ans ="";
	if(n==0){
		return ans+"0";
	}
	while(n){
		ans=str[n%2]+ans;
		n /= 2;
	}
	return ans;
}

int main()
{
	for(int i=0;i<32;i++){
		string str = DecToBin(i);
		switch(str.size()){
			case 1:
				str = "0000"+str;
			break;
			case 2:
				str = "000"+str;
			break;
			case 3:
				str = "00"+str;
			break;
			case 4:
				str = "0"+str;
			break;
		}
		cout<<str<<endl;
	}
	return 0;
}
           

閏年判斷

思路:安裝題目要求判斷

注意事項:

1.無

#include<iostream>
using namespace std;

int main()
{
	int year;
	cin>>year;
	if((year%4==0 && year %100!=0)||year%400==0){
		cout<<"yes"<<endl;
	}else{
		cout<<"no"<<endl;
	}
	return 0;
}
           

圓的面積 

思路:直接利用公式求圓面積

注意事項:

1.#include <iomanip>提供小數保留

2.#include<math.h>提供求Π

#include<iostream>
#include<math.h>
#include <iomanip>
using namespace std;

const double PI=atan(1.0)*4;

int main(){
  int r;
  cin>>r;
  double s;
  s = PI*r*r;
  cout<<setiosflags(ios::fixed)<<setprecision(7)<<s<<endl;
  
  return 0;
}
           

序列求和

思路:等差求和

注意事項:

1.輸入n要為long long int

#include<iostream>
using namespace std;

int main()
{
	long long int n;
	cin>>n;
	long long int ans = n*(1+n)/2;
	cout<<ans<<endl;
	return 0;
}
           

Fibonacci數列

思路:利用Fn=Fn-1+Fn-2計算

注意事項:

1.數組存放元素是餘數更簡單

#include<iostream>
using namespace std;

int main()
{
	long int n;
	cin>>n;
	int ans[n];
	for(int i =1;i<=n;i++){
		if(i==1 || i==2){
			ans[i]=1;
		}else{
			ans[i]=(ans[i-1]+ans[i-2])%10007;
		}
	}
	cout<<ans[n];
	return 0;
}
           

階層計算

思路:根據一個“固定算法”得到值之後,按照數組輸出順序進行輸出

注意事項:

1.按固定寫法即可

2.數組大小要1000,不能1000

3.輸出的時候注意是先輸出大的,是以先輸出數組最後的值

4.要判斷數組最後的有效值在哪裡

#include<iostream>
using namespace std;

int main()
{

	int n;
	cin>>n;
	int ans[10000]={0};
	ans[0]=1;
	for(int i=1;i<=n;i++){
		int count =0;
		for(int j=0;j<10000;j++){
			ans[j]=ans[j]*i+count;
			count = ans[j]/10;
			ans[j] = ans[j]%10;
		}
	}
	int end;
	for(int i=10000-1;i>=0;i--){
		if(ans[i]!=0){
			end=i;
			break;
		}
	}
	for(int i=end;i>=0;i--){
		cout<<ans[i];
	}
	return 0;
}
           

高精度加法

思路:把兩個字元串存入數組中,然後對兩個數組進行相加得到結果

注意事項:

1.字元串存入數組時,需要按從低位到高位順序,因為一會兒要從小往上加

2.進位的時候需要注意沒有進位則清0

3.輸出的時候注意順序

#include<iostream>
using namespace std;
int main()
{
	int A[100] = { 0 }, B[100] = { 0 },C[100]={0};
	int flag = 0;
	string a, b;
	cin >> a >> b;
	for (int i = a.size()-1,j=0; i >=0; i--,j++) {
		A[j] = a[i] - '0';
	}
	for (int i = b.size() - 1, j = 0; i >= 0; i--, j++) {
		B[j] = b[i] - '0';
	}
	for (int i = 0; i < 100; i++) {
		C[i] = A[i] + B[i] + flag;
		if (C[i] >= 10) {
			flag = C[i] / 10;
			C[i] %= 10;
		}
		else {
			flag = 0;
		}
	}
	int end;
	for (int i = 99; i > 0; i--) {
		if (C[i] != 0) {
			end = i;
			break;
		}
	}
	for (int i = end; i >=0; i--) {
		cout << C[i];
	}
	return 0;
}
           

Huffuman樹

思路:用數組存放元素之後,對齊排序,把a【0】和a【1】兩個值加起來得到第一次sum,然後把得到的sum指派給給a【1】,然後對a【1】-a【end】排序,再把a【2】和a【3】加起來,以此類推。

注意事項:

1.數組定義大一點且值為0,防止最後數組下标溢出

2.每次都抛棄排序數組後第一個元素

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
	int ans[102]={0};
	int n,num;
	int sum = 0;
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> num;
		ans[i] = num;
	}
	sort(ans+0, ans + n);
	int index = 0;
	while (index < n-1) {
		sum += ans[index] + ans[index + 1];
		ans[index+1] = ans[index] + ans[index + 1];
		index++;
		sort(ans + index, ans + n);
		
	}

	cout << sum;
	return 0;
}
           

2n皇後問題

 參考部落客:(5條消息) 藍橋杯--基礎練習--[C/C++]2n皇後問題_洛洛希的部落格-CSDN部落格

報時助手

思路:對數字進行模除運算得到各個位,如果小于等于20則按下标輸出,否則判斷一下

注意事項:利用min和sec判斷而不是餘數判斷更簡單

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


int main()
{
	string str[] = { "zero" ,"one","two" ,"three",  "four" ,"five","six" ,"seven", \
					"eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", \
		            "sixteen", "seventeen", "eighteen", "nineteen", "twenty", \
					"thirty ", "forty", "fifty"
		 };
	int min, sec;
	cin >> min >> sec;
	int temp1 = min / 10;
	int temp2 = min % 10;
	int temp3 = sec / 10;
	int temp4 = sec % 10;

	if (min > 20 ) {
		//20-59,沒有30,40,50
		cout << str[temp1+18] << ' ' << str[temp2] << ' ';
	}
	else {
		cout << str[min] << ' ';
	}

	//判斷個位
	if (sec > 20) {
		//20-59,沒有30,40,50
		cout << str[temp3 + 18] << ' ' << str[temp4] << ' ';
	}
	else if (sec <= 20 && sec>0) {
		cout << str[sec] << ' ';
	}
	else {
		cout << "o'clock";
	}

	return 0;
}
           

 回形取數

思路:通過标記數組,每次按照,上下左右進行移動

注意事項:

1.不擔心重複輸出問題,因為有标記數組

2.也不用擔心回到了起始列而不在應該出現的列,因為有标記數組

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

const int N = 205;
int a[N][N];
int vis[N][N] = { 0 };				//初始化,數組裡面都沒有數字 
int main() {
	int n, m;
	cin >> m >> n;

	for (int i = 0; i < m; i++) {
		for (int j = 0; j < n; j++) {
			cin >> a[i][j];
			vis[i][j] = 1;		//數組裡有數字的标記為1 
		}
	}
	cout << a[0][0]; vis[0][0] = 0;//輸出第一個并标記 
	int tot = 1, i = 1, j = 0;  	  //tot為要輸出的總個數,a[i][j],為第i行第j列 
	while (m * n > tot) {
		//1.上往下 
		while (i < m && vis[i][j] == 1) {
			cout << " " << a[i][j];
			vis[i][j] = 0;	//已經輸出過的标記為0 
			i++; tot++;
		}
		i--; j++;			//因為下一次是從下一列開始,那麼j++,而目前i超出數組,是以--
		//2.左往右 
		while (j < n && vis[i][j] == 1) {
			cout << " " << a[i][j];
			vis[i][j] = 0;
			j++; tot++;
		}
		i--; j--;
		//3.下往上 
		while (i >= 0 && vis[i][j] == 1) {
			cout << " " << a[i][j];
			vis[i][j] = 0;
			i--; tot++;
		}
		i++; j--;
		//右往左 
		while (j >= 0 && vis[i][j] == 1) {
			cout << " " << a[i][j];
			vis[i][j] = 0;
			j--; tot++;
		}
		j++; i++;
	}
	return 0;
}
           

龜兔賽跑預測 

思路:龜兔進行跑步,保證兩個人時間一樣,看誰先跑到終點,當兔子懶惰時,直接後退

注意事項:

1.當有一方超過終點時,比較此時兩人跑的距離,誰遠誰赢

2.輸出時間是一樣的,也就是記錄的時間下标index

// ConsoleApplication1.cpp : 此檔案包含 "main" 函數。程式執行将在此處開始并結束。
//

#include <iostream>
using namespace std;


int main()
{
    int v1, v2, t, s, l, s1, s2,index;
    cin >> v1 >> v2 >> t >> s >> l;
    s1 = 0, s2 = 0,index=0;
    while (s1 < l && s2 < l) {
        s1 += v1;
        s2 += v2;
        index++;
        if (s1 == l || s2 == l) {
            //有一個到終點了
            break;
        }
        if (s1 - s2 >= t) {
            //當兔子超過烏龜後,直接休息s秒,相當于兔子退後s*v1這麼遠
            s1 -= v1 * s;
        }
    }
    if (s1 > s2) {
        cout << "R"<<endl;
    }
    else if (s1 < s2) {
        cout << "T"<<endl;
    }
    else {
        cout << "D" << endl;
    }
    cout << index;

}
           

 晶片測試

 思路:對每個被測晶片求它有多少個1,如果1的個數大于0的個數,那麼該晶片是好的

注意事項:

1.本代碼有一個沒過

// ConsoleApplication1.cpp : 此檔案包含 "main" 函數。程式執行将在此處開始并結束。
//

#include <iostream>
using namespace std;


int main()
{
	int n;
	cin >> n;
	int num[30][30]={0};

	int temp;
	//存入資料
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			cin >> temp;
			num[i][j] = temp;
		}
	}
	int ans[n];
	//計算每個晶片被測了多少個1
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			if (i != j && num[i][j] == 1) {
				ans[j]++;
			}
		}
	}
	for (int i = 0; i < n; i++) {
		if (ans[i] >= n / 2) {
			cout << i + 1<<' ';
		}
	}
	return 0;

}
           

FJ數列

不會遞歸
#include <iostream>
using namespace std;
char c[] = { 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z' };
void A(int n)
{
	if (n == 1)
	{
		cout << "A";
	}
	else
	{
		A(n - 1);
		cout << c[n - 1];
		A(n - 1);
	}
}
int main()
{
	int n;
	cin >> n;
	A(n);
	return 0;
}
           

Sine之舞

不會遞歸 
#include <iostream>
#include<string>
using namespace std;
string num;
string num1;
string An(int i, int j, int n)
/*因為每一次這是按照從小到大的順序,是以要變量j,也可以直接全寫成數字1*/
{
	/*string num1 = "0" + j;
	string num1 = '0' + j;  */ /*錯誤*/
	/*num1 = "0" + j;*/
	/*也可以如下表示*/
	num1 = '0' + j;
	string str1 = "sin(" + num1;
	/*因為c++中當進行string對象和字元串字面值混合連接配接操作時,
								+ 操作符的左右操作數必須至少有一個是string類型的*/
	if (i == n)
	{
		return str1 + ')';
	}
	if (j % 2 == 0)
	{
		return	str1 + '+' + An(i + 1, j + 1, n) + ')';
	}
	else
	{
		return	str1 + '-' + An(i + 1, j + 1, n) + ')';
	}
}
string Sn(int i, int j, int n)
{
	num = '0' + i;
	string str1 = "+" + num;
	if (i == n)
	{
		return An(i, j, n) + str1;
	}
	else {
		return '(' + Sn(i + 1, j, n) + ')' + An(i, j, n) + str1;
	}
}
int main()
{
	int N;
	cin >> N;
	int i = 1;
	int j = 1;
	string Sine = Sn(i, j, N);
	cout << Sine << endl;
	return 0;
}
           

 數的讀法

#include <iostream>
using namespace std;
int main()
{
    string str;
    cin >> str;
    string a[10] = { "ling","yi","er","san","si","wu","liu","qi","ba","jiu" };
    string b[10] = { "","shi","bai","qian","wan","shi","bai","qian","yi","shi" };
    int len = str.length();//求輸入數的位數
    for (int i = 0; i < str.length(); i++)
    {
        int flag = str[i] - '0';//求每一位數值,如輸入123,flag的值依次為1,2,3
        if (flag == 0)//對于是0的數的讀法進行讨論,參考分析3
        {
            if (len - i == 5 || len - i == 9)
                cout << b[len - i - 1] << " ";
            if ((len - i) != 1 && str[i + 1] != '0')
                cout << "ling ";
        }
        else if ((len == 2 || len == 6 || len == 10) && flag == 1 && i == 0)//對數字出現的10,是讀yi shi 還是讀 shi 進行分析,參考分析4
        {
            cout << "shi ";
        }
        else//其他直接讀出數和數的對應機關即可
            cout << a[flag] << " " << b[len - i - 1] << " ";
    }
    return 0;
}
           

分解質因素

思路:先判斷是不是素數,是則直接輸出x=x,不是素數,則先除2,除3,除4這樣依次計算,直到x=1

注意事項:

1.math.h庫而不是algorithm庫

2.裡面用了if(!【】),表示【】=0則滿足if

#include<iostream>
#include<algorithm>
using namespace std;
//判斷是不是素數
int isPrime(int n) {
	if (n == 1)
		return 1;
	else {
		for (int i = 2; i <= sqrt(n); i++) {
			if (!(n % i))//=0則滿足條件
				return 0;
		}
		return 1;
	}
}

int main()
{
	int a, b;
	cin >> a >> b;
	for (int i = a; i <= b; i++) {
		if (isPrime(i)) {
			cout << i << "=" << i << endl;
		}
		else {
			cout << i << "=";
			int temp = i;
			int j = 2;
			while (temp > 1) {
				
				if (!(temp % j)) {
					temp = temp / j;
					cout << j;
					if (temp != 1) {
						cout << "*";
					}
				}
				else {
					j++;
				}
			}
			cout << endl;
		}
	}
		


	return 0;
}
           

字元串對比

思路:第一種:判斷大小,第二種,直接“==”,第三種,用ASCALL,第四種則不滿足第三種

注意事項:

1.a:97,A:65

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
	string str1, str2;
	cin >> str1 >> str2;
	int str1Len = str1.size();
	int str2Len = str2.size();
	//第一種 a97 A65
	if (str1Len != str2Len) {
		cout << 1;
	}
	if (str1Len == str2Len && str1 == str2) {
		cout << 2;
		return 0;
	}
	if (str1Len == str2Len && str1 != str2) {
		for (int i = 0,j=0; i < str1.size(),j<str2.size();j++, i++) {
			if (str1[i] != str2[j]) {
				if (str1[i] == str2[j] + 32 || str2[j] == str1[i] + 32) {
					cout << 3;
					return 0;
				}
				else {
					cout << 4;
					return 0;
				}
			}
		}
	}
		


	return 0;
}
           

時間轉換

思路:對時間的小時,分鐘,秒分别進行模餘運算
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
	int num;
	cin >> num;
	int hour = 0, min = 0, miao = 0;
	hour = num / 3600;
	min = num % 3600 / 60;
	miao = num  % 3600 % 60;
	cout << hour << ":" << min << ":" << miao << endl;
		


	return 0;
}
           

來不及了,要寫真題了,鴿了

繼續閱讀