蓝桥杯之基础练习21-30

21.Sine之舞

#include <iostream>
using namespace std;
int main() {
    string a[201];
    string s;
    int n;
    cin >> n;
    for(int i = 0; i < n; i++) {
        if(i == 0) {
            a[i] = "sin(1";
            continue;
        }
        a[i] = a[i - 1];
        if(i % 2 == 1) {
            a[i] += "-";
        } else {
            a[i] += "+";
        }
        a[i] += "sin(";
        a[i] += (char)(i + '1');
    }
    for(int i = 0; i < n; i++) {
        for(int j = 0; j <= i; j++) {
            a[i] += ")";
        }
    }
    for(int i = 2; i <= n; i++) {
        s += "(";
    }
    for(int i = n - 1; i >= 1; i--) {
        s += a[n - 1 - i];
        s += "+";
        s += (char)(i + 1 + '0');
        s += ")";
    }
    s += a[n-1];
    s += "+1";
    cout << s;
    return 0;
}

 22.FJ的字符串

#include <iostream>
using namespace std;
string dfs(int n) {
    if(n == 1) {
        return "A";
    } else {
        return dfs(n - 1) + (char)(n + 'A' - 1) + dfs(n - 1);
    }
}
int main() {
    int n;
    cin >> n;
    cout << dfs(n);
    return 0;
}

 23.芯片测试

#include <iostream>
using namespace std;
int main() {
    int n;
    cin >> n;
    int a[20][20];
    for(int i = 0; i < n; i++) {
        for(int j = 0; j < n; j++) {
            cin >> a[i][j];
        }
    }
    for(int i = 0; i < n; i++) {
        int cnt = 0;
        for(int j = 0; j < n; j++) {
            if(j != i)
                cnt += a[j][i];
        }
        if(cnt >= n/2) {
            cout << i+1 << " ";
        }
    }
    return 0;
}

 24.龟兔赛跑预测

#include <iostream>
using namespace std;
int main() {
	int vr, vt, t, s, l;
	cin >> vr >> vt >> t >> s >> l;
	int ttime = l / vt;
	int cnttime = 0;
	int lent = 0;
	int lenr = 0;
	int breaktime = 0;
	int flag = 0;
	while(lent < l && lenr < l) {
		if(flag == 0 && lenr - lent < t || flag == 1 && breaktime >= s) {
			lenr = lenr + vr;
			flag = 0;
			breaktime = 0;
		} else {
			flag = 1;
			breaktime++;
		}
		lent = lent + vt;
		cnttime++;
	}
	if(lent >= l && lenr < l) {
		cout << "T" << endl;
	} else if(lent < l && lenr >= l) {
		cout << "R" << endl;
	} else {
		cout << "D" << endl;
	}
	cout << cnttime;
	return 0;
}

 25.回形取数

#include <iostream>
#include <memory.h>
using namespace std;
int main() {
    int m, n;
    cin >> m >> n;
    int a[201][201];
    memset(a, -1, sizeof(a));
    int i = 0, j = 0;
    for(i = 0; i < m; i++)
        for(j = 0; j < n; j++)
            cin >> a[i][j];
    i = 0, j = 0;
    int total = 0;
    while(total < m * n) {
        while(i <= m-1 && a[i][j] != -1) {//down
            cout << a[i][j] << " ";
            a[i][j] = -1;
            i++;
            total++;
        }
        i--;
        j++;
        while(j <= n-1 && a[i][j] != -1) {//right
            cout << a[i][j] << " ";
            a[i][j] = -1;
            j++;
            total++;
        }
        j--;
        i--;
        while(i >= 0 && a[i][j] != -1) {//up
            cout << a[i][j] << " ";
            a[i][j] = -1;
            i--;
            total++;
        }
        i++;
        j--;
        while(j >= 0 && a[i][j] != -1) {//left
            cout << a[i][j] << " ";
            a[i][j] = -1;
            j--;
            total++;
        }
        j++;
        i++;
    } 
    return 0;
}

26.报时助手

#include <iostream>
using namespace std;
int main() {
    int h, m;
    cin >> h >> m;
    string arr[24] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen",
					"fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen", "twenty", "twenty one", "twenty two", "twenty three"};
	cout << arr[h] << " ";
    if (m == 0)
        cout << "o'clock";
    int t = m % 10;
    m = m / 10;
    switch(m) {
        case 2: cout << "twenty "; break;
        case 3: cout << "thirty "; break;
        case 4: cout << "forty "; break;
        case 5: cout << "fifty "; break;
        default: break;
    }
    if (m == 0 && t != 0) {
        cout << arr[t];
    }
    if (m == 1) {
        cout << arr[t + 10];
    }
    if (m != 0 && m != 1 && t!= 0) {
        cout << arr[t];
    }
    return 0;
}

27.2n皇后问题

#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
int cnt = 0;
bool issafe(vector<vector<int> > pic, vector<int> pos, int row) {
    for(int i = 0; i < row; i++) {
        if(pos[i] == pos[row] || abs(i - row) == abs(pos[i] - pos[row]))
            return false;
    }
    return true;
}
void blackdfs(vector<vector<int> > blackpic, vector<int> blackpos, int n, int blackrow) {
    if(blackrow == n) {
        cnt++;
        return ;
    }
    for(blackpos[blackrow] = 0; blackpos[blackrow] < n; blackpos[blackrow]++) {
        if(blackpic[blackrow][blackpos[blackrow]] == 1 && issafe(blackpic, blackpos, blackrow)) {
            blackdfs(blackpic, blackpos, n, blackrow + 1);
        }
    }
}
void dfs(vector<vector<int> > pic, vector<int> pos, int n, int row) {
    if(row == n) {
        vector<vector<int> > blackpic(n, vector<int>(n));
        for(int i = 0; i < n; i++) {
            for(int j = 0; j < n; j++) {
                blackpic[i][j] = pic[i][j];
            }
        }
        for(int i = 0; i < n; i++) {
            blackpic[i][pos[i]] = 0;
        }
        vector<int> blackpos(n);
        blackdfs(blackpic, blackpos, n, 0);
        return ;
    }
    for(pos[row] = 0; pos[row] < n; pos[row]++) {
        if(pic[row][pos[row]] == 1 && issafe(pic, pos, row)) {
            dfs(pic, pos, n, row + 1);
        }
    }
}
int main() {
    int n;
    cin >> n;
    vector<vector<int> > pic(n, vector<int>(n));
    vector<int> pos(n);
    for(int i = 0; i < n; i++) {
        for(int j = 0; j < n; j++) {
            cin >> pic[i][j];
        }
    }
    dfs(pic, pos, n, 0);
    cout << cnt;
    return 0;
}

 28.Huffuman树

#include <iostream>
#include <vector>
#include <algorithm>
int cmp1(int a, int b) {
    return a > b;
}
using namespace std;
int main() {
    int n;
    int price = 0;
    vector<int> v;
    cin >> n;
    for(int i = 0; i < n; i++) {
        int temp;
        cin >> temp;
        v.push_back(temp);
    }
    int size = v.size();

    while(size >= 2) {
        sort(v.begin(), v.end(), cmp1);
        int t = v[size-1] + v[size-2];
        price += t;
        v.pop_back();
        v.pop_back();
        v.push_back(t);
        size = v.size();
    }
    cout << price;
    return 0;
}

29.高精度加法

#include <iostream>
#include <string>
using namespace std;
int main() {
    string a;
    string b;
    int A[100] = {0};
    int B[100] = {0};
    cin >> a >> b;
    int lena = a.length(), lenb = b.length();
    int j = 0;
    for (int i = lena - 1; i >= 0; i--) {
        A[j++] = a[i] - '0';
    }
    j = 0;
    for (int i = lenb - 1; i >= 0; i--) {
        B[j++] = b[i] - '0';
    }
    int C[101] = {0};
    int temp = 0;
    for (int i = 0; i < 100; i++) {
        C[i] = A[i] + B[i] + temp;
        temp = C[i] / 10;
        C[i] = C[i] % 10;
    }
    int max = lena;
    if (max < lenb)
        max = lenb;
    max = max - 1;
    if (C[max + 1] != 0)
        max = max + 1;
    for (int i = max; i >= 0; i--) {
        cout << C[i];
    }
    return 0;
}

30.阶乘计算

#include <iostream>
using namespace std;
int main() {
    int n;
    cin >> n;
    int A[10000] = {1};
    for (int i = 1; i <= n; i++) {
        for (int j = 0; j < 10000; j++) {
            A[j] = A[j] * i;
        }
        for (int j = 0; j < 10000; j++) {
            if (A[j] >= 9) {
                A[j + 1] =A[j + 1] + A[j] / 10;
                A[j] = A[j] % 10;
            }
        }
    }
    int t = 0;
    for (int i = 9999; i >= 0; i--) {
        if (A[i] != 0) {
            t = i;
            break;
        }
    }
    for (int i = t; i >= 0; i--) {
        cout << A[i];
    }
    return 0;
}
发布了53 篇原创文章 · 获赞 117 · 访问量 2万+

猜你喜欢

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