蓝桥杯之基础练习11-20

 11.十六进制转十进制

#include <iostream>
#include <string>
using namespace std;
int main() {
    string s;
    while (cin >> s) {
        int len = s.length();
        long long sum = 0;
        for (int i = 0; i < len; i++) {
            if (s[i] >= 'A' && s[i] <= 'F') {
                sum = sum * 16 + s[i] - 'A' + 10;
            }
            else {
                sum = sum * 16 + s[i] - '0';
            }
        }
        cout << sum;
    }
    return 0;
}

12.十六进制转八进制

#include <iostream>
#include <map>
using namespace std;
int main() {
    string b, s, a;
    int n;
    cin >> n;
    string arr[16] = {"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000",
        "1001", "1010", "1011", "1100", "1101", "1110", "1111"};
    map<string, string> m;
    m["000"] = "0"; m["001"] = "1"; m["010"] = "2"; m["011"] = "3"; m["100"] = "4";
    m["101"] = "5"; m["110"] = "6"; m["111"] = "7";
    for(int i = 0; i < n; i++) {
        cin >> s;
        int lens = s.length();
        for(int j = 0; j < lens; j++) {
            if(s[j] > '9') {
                b += arr[s[j] - 'A' + 10];
            } else {
                b += arr[s[j] - '0'];
            }
        }
        int lenb = b.length();
        if(lenb % 3 == 1) {
            b = "00" + b;
        } else if(lenb % 3 == 2) {
            b = "0" + b;
        }
        int flag = 0;
        for(int j = 0; j < lenb; j += 3) {
            string temp = b.substr(j, 3);
            string t = m[temp];
            if(j == 0 && t == "0") {
                flag = 1;
                continue;
            }
            if(flag == 1 && j == 3 && t == "0") {
                continue;
            }
            cout << t;
        }
        cout << endl;
        b = "";
    }
    return 0;
}

13.数列排序

#include <iostream>
#include <algorithm>
using namespace std;
int cmp(int a, int b) {
    return a < b;
}
int main() {
    int n;
    int a[200];
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }
    sort(a, a + n, cmp);
    cout << a[0];
    for (int i = 1; i < n; i++)
        cout << " " << a[i];
    return 0;
}

 14.时间转换

#include <iostream>
using namespace std;
int main() {
    int h = 0, m = 0, s = 0, t;
    cin >> t;
    h = t / 3600;
    t = t % 3600;
    m = t / 60;
    t = t % 60;
    s = t;
    cout << h << ":" << m << ":" << s;
    return 0;
}

 15.字符串对比

#include <iostream>
#include <string>
using namespace std;
int main() {
    string a, b;
    cin >> a >> b;
    int lena = a.length();
    int lenb = b.length();
    if (lena != lenb) {
        cout << 1;
        return 0;
    }
    int flag = 1;
    for (int i = 0; i < lena; i++) {
        if (a[i] != b[i]) {
            flag = 0;
            break;
        }
    }
    if (flag == 1) {
        cout << 2;
        return 0;
    }
    int flag2 = 1;
    for (int i = 0; i < lena; i++) {
        a[i] = tolower(a[i]);
        b[i] = tolower(b[i]);
        if (a[i] != b[i]) {
            flag2 = 0;
            break;
        }
    }
    if (flag2 == 1) {
        cout << 3;
    } else {
        cout << 4;
    }
    return 0;
}

 16.分解质因数

#include <iostream>
using namespace std;
int isprime(int n) {
    if(n <= 1)
        return 0;
    else if(n == 2 || n == 3)
        return 1;
    else {
        for(int i = 2; i * i < 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++) {
        int temp = i;
        cout << i << "=";
        int flag = 0;
        while(temp != 1) {
            for(int j = 2; j <= temp; j++) {
                if(isprime(j) && temp % j == 0) {
                    temp = temp / j;
                    if(flag == 1)
                        cout << "*";
                    cout << j;
                    flag = 1;
                    break;
                }
            }
        }
        cout << endl;
    }
    return 0;
}

 17.矩阵乘法

#include <iostream>
using namespace std;
long long int b[40][40];
int main() {
    int n, m;
    cin >> n >> m;
    long long int a[40][40];
    long long int t[40][40];
    for(int i = 0; i < n; i++) {
        for(int j = 0; j < n; j++) {
            cin >> a[i][j];
            t[i][j] = a[i][j];
        }
    }
    if(m == 0) {
        for(int i = 0; i < n; i++) {
            for(int j = 0; j < n; j++) {
                if(i != j) {
                    cout << 0 << " ";
                } else {
                    cout << 1 << " ";
                }
            }
            cout << endl;
        }
        return 0;
    }
    while(--m) {
        for(int i = 0; i < n; i++) {
            for(int j = 0; j < n; j++) {
                int k = n;
                while(k) {
                    b[i][j] += t[i][k-1] * a[k-1][j];
                    k--;
                }
            }
        }
        for(int i = 0; i < n; i++) {
            for(int j = 0; j < n; j++) {
                t[i][j] = b[i][j];
                b[i][j] = 0;
            }
        }
    }
    for(int i = 0; i < n; i++) {
        for(int j = 0; j < n; j++) {
            cout << t[i][j] << " ";
        }
        cout << endl;
    }
    return 0;
}

18.矩形面积交

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int main() {
    double x1, y1, x2, y2, x3, y3, x4, y4;
    cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3 >> x4 >> y4;
    if(x1 > x2)
        swap(x1, x2);
    if(y1 > y2)
        swap(y1, y2);
    if(x3 > x4)
        swap(x3, x4);
    if(y3 > y4)
        swap(y3, y4);
    if((x2 < x3 && x1 < x3) || (y2 < y3 && y1 < y3) || (x4 < x1 && x3 > x1) || (y4 < y1 && y3 < y1)) {
        cout << "0.00";
        return 0;
    }
    double a[4] = {x1, x2, x3, x4};
    double b[4] = {y1, y2, y3, y4};
    sort(a, a+4);
    sort(b, b+4);
    double area = (a[2] - a[1]) * (b[2] - b[1]);
    printf("%.2f", area);
    return 0;
}

 19.完美的代价

#include <iostream>
using namespace std;
int main() {
    int n;
    cin >> n;
    string s;
    cin >> s;
    int j = n - 1;
    int cnt = 0;
    int flag = 0;
    for(int i = 0; i < j; i++) {
	for(int k = j; k >= i; k--) {
            if(k == i) {
	        if(n % 2 == 0 || flag == 1) {
		    cout << "Impossible";
		    return 0;
		}
		flag = 1;
		cnt += n / 2 - i;
	    } else if(s[k] == s[i]) {
		for(int l = k; l < j; l++) {
		    swap(s[l], s[l+1]);
		    cnt++;
		}
	        j--;
	        break;
	    }
        }
    }
    cout << cnt;
    return 0;
}

20.数的读法

#include <iostream>
using namespace std;
string b[10] = {"ling ", "yi ", "er ", "san ", "si ", "wu ", "liu ","qi ", "ba ", "jiu "};
string func(string t) {
    string ans;
    int lent = t.length();
    if(lent >= 4) {
        ans += b[t[0]-'0'];
        ans += "qian ";
    }
    if(lent >= 3) {
        if(t[lent-3] != '0') {
            ans += b[t[lent-3]-'0'];
            ans += "bai ";
        }
    }
    if(lent >= 2) {
        if(t[lent-2] == '1') {
            if(lent != 2) {
                ans += "yi shi ";
            } else {
                ans += "shi ";
            }
        }
        if(t[lent-2] != '0' && t[lent-2] != '1') {
            ans += b[t[lent-2]-'0'];
            ans += "shi ";
        }
    }
    if(lent >= 1) {
        if(t[lent-1] != '0') {
            ans += b[t[lent-1]-'0'];
        }
    }
    return ans;
}

int main() {
    string s;
    cin >> s;
    int len = s.length();
    string sub;
    if(len == 10) {
        sub = s.substr(0, 2);
        cout << func(sub) << "yi ";
    }
    if(len == 9) {
        sub = s.substr(0, 1);
        cout << func(sub) << "yi ";
    }
    sub = "";
    int flag = 0;
    if(len >= 5) {
        for(int i = len-8; i < len - 4; i++) {
            if(i < 0) continue;
            if(flag == 0 && s[i] == '0') {
                continue;
            }
            sub += s[i];
            flag = 1;
        }
        if(flag == 1) {
            cout << func(sub) << "wan ";
        }
        flag = 0;
        sub = "";
        for(int i = len-4; i < len; i++) {
            if(flag == 0 && s[i] == '0') {
                continue;
            }
            if((i == len-1 && s[i-1] == '0') ||(i == len-2 && s[i-1] == '0') || (i == len-3 && s[i-1] == '0'))
                cout << "ling ";
            sub += s[i];
            flag = 1;
        }
    }
    if(len <= 4) {
        sub = s;
        flag = 1;
    }
    if(flag == 1) {
        cout << func(sub);
    }
    return 0;
}
发布了53 篇原创文章 · 获赞 117 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_40431584/article/details/88318422