团体程序设计天梯赛-练习集L1-001~010

酶和ATP 2022年03月30日 614次浏览

L1-001 Hello World (5 分)

#include <iostream>
using namespace std;
int main()
{
    cout << "Hello World!" << endl;
    return 0;
}

L1-002 打印沙漏 (20 分)

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

int a;
int n;
int sum;
char c;
vector<int> v;

int main() {
    cin >> n >> c;
    a = n;
    // 第一层
    a--, n--;
    v.push_back(1);
    // 枚举看看有几层
    for (int i = 2; i < 100; i++) {
        int t = 2 * (2 * i - 1);
        a -= t;
        if (a < 0) break;
        sum += t;
        v.push_back(2 * i - 1);
    }

    for (int i = v.size() - 1; i >= 0; i--) {
        for (int j = 1; j <= (v[v.size() - 1] - v[i]) / 2; j++) cout << ' ';
        for (int j = 1; j <= v[i]; j++) cout << c;
        cout << endl;
    }
    for (int i = 1; i < v.size(); i++) {
        for (int j = 1; j <= (v[v.size() - 1] - v[i]) / 2; j++) cout << ' ';
        for (int j = 1; j <= v[i]; j++) cout << c;
        cout << endl;
    }
    // 输出剩下的数字
    cout << n - sum << endl;
    return 0;
}

L1-003 个位数统计 (15 分)

#include <algorithm>
#include <cstring>
#include <iostream>
#include <map>
#define x first
#define y second
using namespace std;

string n;
map<int, int> m;

int main() {
    cin >> n;
    for (int i = 0; i < n.size(); i++) m[n[i] - '0']++;

    for (auto node : m) cout << node.x << ':' << node.y << endl;

    return 0;
}

L1-004 计算摄氏温度 (5 分)

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

int F;

int main()
{
    cin >> F;
    cout << "Celsius = " << 5 * ( F - 32 ) / 9 << endl;
    return 0;
}

L1-005 考试座位号 (15 分)

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

const int N = 1010;
int n;
string id[N];
int ks[N];

int main()
{
    cin >> n;
    // 准考证号 试机座位号 考试座位号
    for(int i = 0;i < n;i ++)
    {
        string a;
        int b, c;
        cin >> a >> b >> c;
        id[b] = a,ks[b] = c;
    }
    // 询问试机座位号码
    cin >> n;
    for(int i = 0;i < n;i ++)
    {
        int query;
        cin >> query;
        cout << id[query] << ' ' <<  ks[query] << endl;
    }
    
    return 0;
}

L1-006 连续因子 (20 分)-14分

https://pintia.cn/problem-sets/994805046380707840/problems/994805138600869888

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

typedef long long LL;
vector<LL> v;
LL n;

int main() {
    scanf("%lld", &n);

    for (LL i = 2; i < n; i++) {
        if (v.size() < 2 && n % (i * (i + 1)) == 0) {
            v.resize(0);
            v.push_back(i);
            v.push_back(i + 1);
        }
        if (v.size() < 3  && n % (i * (i + 1) * (i + 2)) == 0) {
            v.resize(0);
            v.push_back(i);
            v.push_back(i + 1);
            v.push_back(i + 2);
        }
        if (v.size() < 4 && n % (i * (i + 1) * (i + 2) * (i + 3)) == 0) {
            v.resize(0);
            v.push_back(i);
            v.push_back(i + 1);
            v.push_back(i + 2);
            v.push_back(i + 3);
        }
        if (v.size() < 5 && n % (i * (i + 1) * (i + 2) * (i + 3) * (i + 4)) == 0) {
            v.resize(0);
            v.push_back(i);
            v.push_back(i + 1);
            v.push_back(i + 2);
            v.push_back(i + 3);
            v.push_back(i + 4);
        }
    }
    cout << v.size() << endl;
    for(int i = 0;i < v.size();i ++)
    {
        cout << v[i];
        if(i != v.size() - 1) cout << '*';
    }
    cout << endl;
    return 0;
}

L1-007 念数字 (10 分)

#include <algorithm>
#include <cstring>
#include <iostream>
#include <map>
using namespace std;
map<char, string> m;
string n;
int main() {
    m['-'] = "fu";
    m['0'] = "ling";
    m['1'] = "yi";
    m['2'] = "er";
    m['3'] = "san";
    m['4'] = "si";
    m['5'] = "wu";
    m['6'] = "liu";
    m['7'] = "qi";
    m['8'] = "ba";
    m['9'] = "jiu";
    cin >> n;
    for (int i = 0; i < n.size(); i++) {
        cout << m[n[i]];
        if (i != n.size() - 1) cout << ' ';
    }
    cout << endl;
    return 0;
}

L1-008 求整数段和 (10 分)

#include <algorithm>
#include <cstring>
#include <iostream>
using namespace std;
int a, b;
int sum;
int main() {
    cin >> a >> b;
    for (int i = a; i <= b; i++) {
        printf("%5d", i);
        sum += i;
        if ((i - a + 1) % 5 == 0) printf("\n");
    }
    // 特判换行
    if ((b - a + 1) % 5 != 0) printf("\n");
    printf("Sum = %d\n", sum);
    return 0;
}

L1-009 N个数求和 (20 分)-17分


https://pintia.cn/problem-sets/994805046380707840/problems/994805133597065216

#include <algorithm>
#include <cstring>
#include <iostream>
using namespace std;
const int N = 110;
// 题目要求长整型范围
typedef long long LL;
int n;
LL a[N], b[N];
LL sum;

LL gcd(int a, int b) { return b ? gcd(b, a % b) : a; }

LL lcm(int a, int b) { return a * b / gcd(a, b); }

int main() {
    scanf("%d", &n);
    int m = 1;
    for (int i = 0; i < n; i++) {
        scanf("%lld/%lld", &a[i], &b[i]);
        m = lcm(m, b[i]);
    }
    for (int i = 0; i < n; i++) {
        a[i] *= (m / b[i]);
        sum += a[i];
    }
    // 处理数字
    LL t = gcd(sum, m);
    sum /= t;
    m /= t;
    // 特判负号
    if (sum < 0) {
        cout << '-';
        sum = abs(sum);
    }
    if (sum % m == 0)  // 是不是整数
        cout << sum / m << endl;
    else if (sum < m)  // 有没有整数
        cout << sum % m << '/' << m << endl;
    else
        cout << sum / m << ' ' << sum % m << '/' << m << endl;
    return 0;
}

L1-010 比较大小 (10 分)

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

typedef long long LL;
LL a[5];
int main()
{
    cin >> a[0] >> a[1] >> a[2];
    sort(a , a + 3);
    cout << a[0] << "->" << a[1] << "->" << a[2] << endl;
    return 0;
}