第四届传智杯全国大学生IT技能大赛(练习题)——纯暴力题解

小菜鸡一枚,大佬们全部加起来的时间一分多种,我的加上罚时有十分钟了,纯暴力,发出来仅供参考
T211364 [#4练习赛]符合条件的数
这一题本来想”造数“的,写着写着自己给想乱了,然后就改写了暴力【用时:00:26】

#include <iostream>
using namespace std;

int num(int temp){
    int num = 0;
    while(temp > 0){
        num = (temp % 10 == 3) ? (++num) : num;
        temp /= 10;
    }
    return num;
}
int main(){
    int n, k, i = 0, temp = 0, difference = 0, result = 0;
    cin >> n >> k;
    difference = k - num(n); //判断初始有几个3
    if(difference){
        for(int i = n; ; i++){
            result = num(i);
            if(result == k){
                cout << i << endl;
                break;
            }
        }
    } else {
        cout << n << endl;
    }


    return 0;
}

T211368 [#4练习赛]选代表
这里C++用vector之类的做会更简单,不过相对的空间浪费也会大一点【用时00:35】

#include <iostream>
using namespace std;

int num[20005] = {0};

int main(){
    int n;
    cin >> n;
    for(int i = 0;  i < n; i++){
        cin >> num[i];
    }
    for(int i = 0; i < n; i++){
        for(int j = i + 1; j < n; j++){
            if(num[i] == num[j]){
                num[j] = -1;
            }
        }
    }
    for(int i = 0; i < n; i++){
        if(num[i] == -1){
            continue;
        }
        cout << num[i] << " ";
    }

    return 0;
}

T211372[#4练习赛]成绩统计
这一题是纯纯的暴力,直接用数组做的,因为结构体好久不用了,写起来没有数组顺手,当然了结构体会快很多,一定要注意看题目!!!我就因为没看清题目多了三遍罚时(麻了)【用时:02:06】

#include <iostream>
#include <string>
#include <cmath>
using namespace std;

string student[105];
int dailyGrade[105] ={0};
int finalGrade[105] = {0};
int totalGrade[105] = {0};

void sortNum(int n){
    for(int i = 1; i <= n - 1; i++){
        for(int j = 1; j <= n - i; j++){
            if(totalGrade[j - 1] < totalGrade[j]){
                int temp = totalGrade[j - 1];
                string box = student[j - 1];
                totalGrade[j - 1] = totalGrade[j], student[j - 1] = student[j];
                totalGrade[j] = temp, student[j] = box;
            }
        }
    }
}
int main(){
    int n;
    cin >> n;
    for(int i = 0; i < n; i++){
        cin >> student[i] >> dailyGrade[i] >> finalGrade[i];
        double result = ceil(sqrt(finalGrade[i]) * 10) * 0.6 + dailyGrade[i]  * 0.4;
        totalGrade[i] = int(result + 0.5);
    }
    sortNum(n);
    for(int i = 0; i < n; i++){
        cout << student[i] << " " << totalGrade[i] << endl;
    }

    return 0;
}

T211939 [#4练习赛]背答案
直接判断输入的字符串吧,我一开始想的用字符数组做输入,然后再像Java一样整个分隔啥的,然后写着写着给自己写迷茫了【用时:02:54】

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

string num[105], qes[105];
char ch[105];
string title, ans1, ans2, ans3, ans4;

int main(){
    int n, p;
    cin >> n >> p;
    for(int i = 0; i < n; i++){
        cin >> num[i] >> qes[i];
    }
    for(int i = 0; i < p; i++){
        cin >> title >> ans1 >> ans2 >> ans3 >> ans4;
        for(int j = 0; j < n; j++){
            if(title == num[j]){
                if(ans1 == qes[j]){
                    ch[i] = 'A';
                }
                if(ans2 == qes[j]){
                    ch[i] = 'B';
                }
                if(ans3 == qes[j]){
                    ch[i] = 'C';
                }
                if(ans4 == qes[j]){
                    ch[i] = 'D';
                }
            }
        }
    }
    for(int i = 0; i < p; i++){
        cout << ch[i] << endl;
    }

    return 0;
}

T211943 [#4练习赛]击鼓传花
这一题的数据范围也很麻,我只想到用标记的方法去做,暂时没想到别的好方法,官方题解也还没去看,输入一个查一个,还是极其暴力的【用时:02:33】

#include <iostream>
using namespace std;

int isFlag[1000005];
int pm[1000005];

int main(){
    int n, m, k, result = 0;
    cin >> n >> m >> k;
    for(int i = 0; i < m; i++){
        cin >> pm[i];
        int flower = pm[i];
        isFlag[flower] = 1;
        flower = (flower + k) % n;
        while(!isFlag[flower]){
            isFlag[flower] = 1;
            flower = (flower + k) % n;
        }
    }
    for(int i = 0; i < n; i++){
        if(!isFlag[i]){
            ++result;
        }
    }
    cout << result << endl;


    return 0;
}

传智杯练习赛地址:

题目不难暴力都能写就是看着和大佬们的差距有点挫折,第一名的大佬总用时01:27,哭了/(ㄒoㄒ)/~~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值