第四届“传智杯”全国大学生IT技能大赛(练习赛)

A. 符合条件的数


题目描述

  • 给出 NN 和 kk,找到一个不小于 NN 的正整数,满足这个数中有 kk 位数字是 33,且尽可能小。

输入格式

题目
题目


WA

#include <iostream>
#include <string>
using namespace std;
int main()
{
    int k, cnt = 1;
    string num;
    cin >> num >> k;
    for (int index = 0; index != num.length(); ++index)
    {
        //cout << num[index] << " ";
        if(num[index] == '3')
        {
            cnt++;
            if(cnt == k){
                cout << num << endl;
                break;
            }
            else
            {
                cout << "error!" << endl;
                continue;
            }
        }
    }
    return 0;
}

AC

#include <bits/stdc++.h>
using namespace std;
int main()
{
    std::ios_base::sync_with_stdio(false);
    int i, n, k;
    cin >> n >> k;
    for (i = n;; i++)
    {
        int tmp = i, sum = 0;
        while(tmp != 0)
        {
            if(tmp % 10 == 3)
                sum++;
            tmp /= 10;
        }
        if(sum == k)
            break;
    }
    cout << i << endl;
    return 0;
}

B. 选代表


题目


AC

#include <iostream>
using namespace std;
int main()
{
    /*
        思路:去除重复的元素,对剩余的元素进行排序
            由于读入的元素在 0 ~ 1000 之间,我们准备一个长度为1001的数组
                用来标记 x 有没有出现过
    */
    int i, n, a[110], x, j, t;
    int f[1001] = {0}; // 标记数组
    int k = 0;         // 表示目前数组中实际不重复的元素个数
    cin >> n;
    // i代表将要读入n个数,相当于是一个计数器
    for (i = 0; i < n; i++)
    {
        cin >> x;
        // 如果数组a中没有元素x,则将x存入数组
        if (f[x] == 0)
        {
            a[k] = x;
            k++;
            // 修改标记,标记x出现了
            f[x] = 1;
        }
    }
    // 输出
    cout << a[0];
    for (i = 1; i < k; i++)
        cout << " " << a[i];
}

题解 AC

#include <iostream>
using namespace std;
bool vis[105];  //记录输入的数是否出现过
int main()
{
    int a, n;
    cin >> n;
    for (int i = 1; i <= n;i++)
    {
        cin >> a;
        if(!vis[a])
        {
            cout << a << " ";
            vis[a] = 1;
        }
    }
    return 0;
}

C. 成绩统计


题目
题目


AC

#include <bits/stdc++.h>
using namespace std;
struct stu
{
    string name;
    int id, score;
} s[110];

bool cmp(stu &x, stu &y)
{
    if(x.score == y.score)
        return x.id < y.id;
    return x.score > y.score;
}

int main()
{
    int n;
    cin >> n;
    for (int i = 1; i <= n;i++)
    {
        int mid, final;
        cin >> s[i].name >> mid >> final;
        s[i].id = i;
        s[i].score = int(round(0.6 * ceil(10 * sqrt(final)) + 0.4 * mid));
    }
    sort(s + 1, s + n + 1, cmp);
    for (int i = 1; i <= n;i++)
    {
        cout << s[i].name << " " << s[i].score << endl;
    }
        return 0;
}

Tips

  • 对于小数而言,round()函数仅仅保留到整数位,即仅仅对小数点后一位四舍五入。
    sort

D. 背答案


题目
题目


AC

#include <bits/stdc++.h>
using namespace std;
int main()
{
    string timu[105], daan[105];
    int n, q;
    cin >> n >> q;
    for (int i = 1; i <= n;i++)
    {
        cin >> timu[i] >> daan[i];
    }
    for (int i = 1; i <= q;i++)
    {
        string t, a, b, c, d;
        int flag;
        cin >> t >> a >> b >> c >> d;
        for (int j = 1; j <= n;j++)
        {
            if(t == timu[j])
            {
                flag = j;
                break;
            }
        }
        if(daan[flag] == a)
            cout << "A" << endl;
        if(daan[flag] == b)
            cout << "B" << endl;
        if(daan[flag] == c)
            cout << "C" << endl;
        if(daan[flag] == d)
            cout << "D" << endl;
    }
        return 0;
}

E. 击鼓传花


题目
题目


AC

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define N 1000010
int n, m, k, t, a[N], ans;
int main()
{
    cin >> n >> m >> k;
    for (int i = 0; i < m; i++)
    {
        cin >> t;
        if (a[t])
            continue;
        while (1)
        {
            if (a[t] == 1)
                break;
            a[t] = 1;
            t += k;
            t %= n;
        }
    }
    for (int i = 0; i < n; i++)
    {
        if (a[i] == 0)
            ans++;
    }
    cout << ans;
    return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值