ACM 2016级新生赛题解(2)

343

题号题目
Problem AA + B Problem
Problem B求绝对值
Problem C成绩转换
Problem D水仙花数
Problem E数据的交换输出
Problem F字符串统计
Problem G多项式求和
Problem H求数列的和
Problem I折线分割平面
Problem JChoosing Teams


本题解采用 C++ ,大概思路与 C 一样
cin 对应 scanf
cout 对应 printf

如果还有问题群里问即可,有余力的同学可以看群公告里上一次比赛
那一套题更难,群文件有上次的题解



A + B Problem  


计算 A + B
多组数据,以 EOF 结尾
/*
By:OhYee
Github:OhYee
Blog:http://www.oyohyee.com/
Email:oyohyee@oyohyee.com

かしこいかわいい?
エリーチカ!
要写出来Хорошо的代码哦~
*/
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <sstream>
#include <map>
#include <set>
#include <list>
#include <queue>
#include <stack>
#include <string>
#include <vector>
#include <bitset>
#include <functional>

using namespace std;

typedef long long LL;

const int maxn = 105;

const int INF = 0x7FFFFFFF;
const double eps = 1e-10;

bool Do() {
    int a,b;
    if(cin >> a >> b) {
        cout << a + b << endl;
        return true;
    } else {
        return false;
    }
}

int main() {
    cin.tie(0);
    cin.sync_with_stdio(false);

    while(Do());
    return 0;
}


求绝对值


求一个实数的绝对值
使用 cmath 头文件(math.h)里的 fabs() 函数
输出记得保留小数

/*
By:OhYee
Github:OhYee
Blog:http://www.oyohyee.com/
Email:oyohyee@oyohyee.com

かしこいかわいい?
エリーチカ!
要写出来Хорошо的代码哦~
*/
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <sstream>
#include <map>
#include <set>
#include <list>
#include <queue>
#include <stack>
#include <string>
#include <vector>
#include <bitset>
#include <functional>

using namespace std;

typedef long long LL;

const int maxn = 105;

const int INF = 0x7FFFFFFF;
const double eps = 1e-10;



bool Do() {
    double a;
    if(cin >> a) {
        cout <<fixed<<setprecision(2)<< fabs(a) << endl;
        return true;
    } else {
        return false;
    }
}

int main() {
    cin.tie(0);
    cin.sync_with_stdio(false);

    while(Do());
    return 0;
}



成绩转换


针对不同的输入,有不同的输出
/*
By:OhYee
Github:OhYee
Blog:http://www.oyohyee.com/
Email:oyohyee@oyohyee.com

かしこいかわいい?
エリーチカ!
要写出来Хорошо的代码哦~
*/
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <sstream>
#include <map>
#include <set>
#include <list>
#include <queue>
#include <stack>
#include <string>
#include <vector>
#include <bitset>
#include <functional>

using namespace std;

typedef long long LL;

const int maxn = 105;

const int INF = 0x7FFFFFFF;
const double eps = 1e-10;

inline bool compare(int n,int a,int b) {
    return n >= a&&n <= b;
}
bool Do() {
    int a;
    if(cin >> a) {
        if(compare(a,0,59))
            cout << "E" << endl;
        else if(compare(a,60,69))
            cout << "D" << endl;
        else if(compare(a,70,79))
            cout << "C" << endl;
        else if(compare(a,80,89))
            cout << "B" << endl;
        else if(compare(a,90,100))
            cout << "A" << endl;
        else
            cout << "Score is error!" << endl;
        return true;
    } else {
        return false;
    }
}

int main() {
    cin.tie(0);
    cin.sync_with_stdio(false);

    while(Do());
    return 0;
}


水仙花数


先写一个函数判断一个数是不是水仙花数
模拟定义即可

可以先把所有数筛选一遍,打个表,可以节省时间

输出的时候记得输出空格,并且只有两个数字中间有,最后不要有多余的


/*
By:OhYee
Github:OhYee
Blog:http://www.oyohyee.com/
Email:oyohyee@oyohyee.com

かしこいかわいい?
エリーチカ!
要写出来Хорошо的代码哦~
*/
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <sstream>
#include <map>
#include <set>
#include <list>
#include <queue>
#include <stack>
#include <string>
#include <vector>
#include <bitset>
#include <functional>

using namespace std;

typedef long long LL;

const int maxn = 105;

const int INF = 0x7FFFFFFF;
const double eps = 1e-10;

bool sxh[1005];

inline int Cube(int a) {
    return  a*a*a;
}

inline bool issxh(int n) {
    int m = n;
    int sum = 0;
    while(m) {
        sum += Cube(m % 10);
        m /= 10;
    }
    return sum == n;
}
bool Do() {
    int a,b;
    if(!(cin >> a >> b))
        return false;

    int has = false;
    for(int i = a;i <= b;i++) {
        if(sxh[i]) {
            if(has)
                cout << " ";
            cout << i;
            has = true;
        }
    }
    if(!has)
        cout << "no";
    cout << endl;

    return true;
}

int main() {
    cin.tie(0);
    cin.sync_with_stdio(false);

    for(int i = 100;i <= 999;i++)
        sxh[i] = issxh(i);

    while(Do());
    return 0;
}


数据的交换输出


遍历所有数,找到最小数的位置,交换它和第一个

/*
By:OhYee
Github:OhYee
Blog:http://www.oyohyee.com/
Email:oyohyee@oyohyee.com

かしこいかわいい?
エリーチカ!
要写出来Хорошо的代码哦~
*/
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <sstream>
#include <map>
#include <set>
#include <list>
#include <queue>
#include <stack>
#include <string>
#include <vector>
#include <bitset>
#include <functional>

using namespace std;

typedef long long LL;

const int INF = 0x7FFFFFFF;
const double eps = 1e-10;

const int maxn = 105;
int a[maxn];

bool Do() {
    int n;
    cin >> n;
    if(n==0)
        return false;

    int pos = 0;
    for(int i = 0;i < n;i++) {
        cin >> a[i];
        if(a[i] < a[pos])
            pos = i;
    }

    int t = a[pos];
    a[pos] = a[0];
    a[0] = t;

    for(int i = 0;i < n;i++) {
        if(i)
            cout << " ";
        cout << a[i];
    }
    cout << endl;

    return true;
}

int main() {
    cin.tie(0);
    cin.sync_with_stdio(false);

    while(Do());
    return 0;
}


字符串统计


遍历一行字符,统计数字的个数

By:OhYee
Github:OhYee
Blog:http://www.oyohyee.com/
Email:oyohyee@oyohyee.com

かしこいかわいい?
エリーチカ!
要写出来Хорошо的代码哦~
*/
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <sstream>
#include <map>
#include <set>
#include <list>
#include <queue>
#include <stack>
#include <string>
#include <vector>
#include <bitset>
#include <functional>

using namespace std;

typedef long long LL;

const int INF = 0x7FFFFFFF;
const double eps = 1e-10;

string s;

bool Do() {
    cin >> s;
    int cnt = 0;
    for(size_t i = 0;i < s.size();i++) {
        if(s[i] >= '0' && s[i] <= '9')
            cnt++;
    }

    cout << cnt << endl;
    return true;
}

int main() {
    cin.tie(0);
    cin.sync_with_stdio(false);

    int T;
    cin >> T;

    while(T--) {
        Do();
    };

    return 0;
}


多项式求和


计算多项式

可以先计算好所有的结果,然后查表输出
需要使用 double

/*
By:OhYee
Github:OhYee
Blog:http://www.oyohyee.com/
Email:oyohyee@oyohyee.com

かしこいかわいい?
エリーチカ!
要写出来Хорошо的代码哦~
*/
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <sstream>
#include <map>
#include <set>
#include <list>
#include <queue>
#include <stack>
#include <string>
#include <vector>
#include <bitset>
#include <functional>

using namespace std;

typedef long long LL;

const int INF = 0x7FFFFFFF;
const double eps = 1e-10;


const int maxn = 1005;
double ans[maxn];

bool Do() {
    int n;
    cin >> n;
    cout << ans[n] << endl;
    return true;
}

int main() {
    cin.tie(0);
    cin.sync_with_stdio(false);
    cout << fixed << setprecision(2);


    ans[0] = 0;
    for(int i = 1;i <= 1000;i++) {
        ans[i] = ans[i - 1] + ((double)1 / i) * ((i % 2) ? 1 : -1);
    }

    int T;
    cin >> T;

    while(T--) {
        Do();
    };

    return 0;
}



求数列的和


使用 cmath 头文件(math.h)的 sqrt() 函数

/*
By:OhYee
Github:OhYee
Blog:http://www.oyohyee.com/
Email:oyohyee@oyohyee.com

かしこいかわいい?
エリーチカ!
要写出来Хорошо的代码哦~
*/
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <sstream>
#include <map>
#include <set>
#include <list>
#include <queue>
#include <stack>
#include <string>
#include <vector>
#include <bitset>
#include <functional>

using namespace std;

typedef long long LL;

const int INF = 0x7FFFFFFF;
const double eps = 1e-10;


const int maxm = 1005;

bool Do() {
    double n,m;
    if(!(cin >> n>>m))
        return false;

    double ans = 0;
    while(m--) {
        ans += n;
        n = sqrt(n);
    }
    cout << ans << endl;
    return true;
}

int main() {
    cin.tie(0);
    cin.sync_with_stdio(false);
    cout << fixed << setprecision(2);

    while(Do());

    return 0;
}


折线分割平面


可推出公式:2n2 - n + 1

/*
By:OhYee
Github:OhYee
Blog:http://www.oyohyee.com/
Email:oyohyee@oyohyee.com

かしこいかわいい?
エリーチカ!
要写出来Хорошо的代码哦~
*/
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <sstream>
#include <map>
#include <set>
#include <list>
#include <queue>
#include <stack>
#include <string>
#include <vector>
#include <bitset>
#include <functional>

using namespace std;

typedef long long LL;

const int INF = 0x7FFFFFFF;
const double eps = 1e-10;

bool Do() {
    int n;
    cin >> n;
    cout << 2 * n*n - n + 1 << endl;
    return true;
}

int main() {
    cin.tie(0);
    cin.sync_with_stdio(false);
    cout << fixed << setprecision(2);

    int T;
    cin >> T;
    while(T--)
        Do();
    return 0;
}


Choosing Teams


给出 n 个人参加过比赛的次数,需要组参加 k 场比赛的 3 人队伍,每个人最多只能参加 5 次比赛
求能组的最多队伍数量

求大于等于 5-k 的人的数量,然后除以 3 即可

/*
By:OhYee
Github:OhYee
Blog:http://www.oyohyee.com/
Email:oyohyee@oyohyee.com

かしこいかわいい?
エリーチカ!
要写出来Хорошо的代码哦~
*/
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <sstream>
#include <map>
#include <set>
#include <list>
#include <queue>
#include <stack>
#include <string>
#include <vector>
#include <bitset>
#include <functional>

using namespace std;

typedef long long LL;

const int INF = 0x7FFFFFFF;
const double eps = 1e-10;

bool Do() {
    int n,k;
    if(!(cin >> n>>k))
        return false;
    int ans = 0;
    for(int i = 0;i < n;i++) {
        int t;
        cin >> t;
        if(t + k <= 5)
            ans++;
    }
    cout << ans / 3 << endl;
    return true;
}

int main() {
    cin.tie(0);
    cin.sync_with_stdio(false);

    while(Do());
    return 0;
}
发布评论
  • 点击查看/关闭被识别为广告的评论