信息学奥赛一本通 1.5:数组(1)

​第一部分 C++语言

第五章 数组

第一节 一维数组

1102 与指定数字相同的数的个数

#include <iostream>
using namespace std;

int main() {
    int n, m, a[105], cnt = 0;
    cin >> n;

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

    cin >> m;

    for (int i = 0; i < n; i ++ ) {
        if (a[i] == m) cnt ++;
    }

    cout << cnt << endl;

    return 0;
}
1103 陶陶摘苹果
#include <iostream>
using namespace std;

int main() {
    int a[10], h, cnt = 0;

    for (int i = 0; i < 10; i ++ ) cin >> a[i];

    cin >> h;

    for (int i = 0; i < 10; i ++ ) {
        if (h + 30 >= a[i]) cnt ++;
    }

    cout << cnt << endl;

    return 0;
}
1104 计算书费
#include <cstdio>
using namespace std;

int main() {
    int qty;
    double ttl, price[10] = {28.9, 32.7, 45.6, 78, 35, 86.2, 27.8, 43, 56, 65};

    for (int i = 0; i < 10; i ++ ) {
        scanf("%d", &qty);
        ttl += price[i] * qty;
    }

    printf("%.1lf", ttl);

    return 0;
}
1105 数组逆序重存放
#include <iostream>
using namespace std;

int main() {
    int n, a[105];

    cin >> n;

    for (int i = 1; i <= n; i ++ ) cin >> a[i];

    for (int i = n; i >= 1; i -- ) cout << a[i] << ' ';

    return 0;
}
1106 年龄与疾病
#include <cstdio>
using namespace std;

int main() {
    int n, age, c[4] = {};

    scanf("%d", &n);

    for (int i = 0; i < n; i ++ ) {
        scanf("%d", &age);
        if (age >=0 && age <=18) c[0] ++;
        else if (age <= 35) c[1] ++;
        else if (age <= 60) c[2] ++;
        else c[3] ++;
    }

    printf("%.2lf%%\n", 100.0 * c[0] / n);
    printf("%.2lf%%\n", 100.0 * c[1] / n);
    printf("%.2lf%%\n", 100.0 * c[2] / n);
    printf("%.2lf%%\n", 100.0 * c[3] / n);

    return 0;
}
1107 校门外的树
#include <iostream>
using namespace std;

int main() {
    int l, m, a[10005], cnt = 0;
    cin >> l >> m;

    for (int i = 0; i <= l; i ++ ) a[i] = 1;

    while (m--) {
        int s, e;
        cin >> s >> e;
        for (int i = s; i <= e; i ++ ) a[i] = 0;
    }

    for (int i = 0; i <= l; i ++ ) {
        if (a[i] == 1) cnt ++;
    }

    cout << cnt << endl;

    return 0;
}
1108 向量点积计算
#include <iostream>
using namespace std;

int main() {
    int n, a[1005], b[1005], ans = 0;

    cin >> n;

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

    for (int i = 0; i < n; i ++ ) cin >> b[i];

    for (int i = 0; i < n; i ++ ) {
        ans += a[i] * b[i];
    }

    cout << ans << endl;

    return 0;
}
1109 开关灯
#include <iostream>
using namespace std;

int main() {
    int n, m;
    bool a[5005];

    cin >> n >> m;

    for (int i = 1; i <= n; i ++ ) a[i] = 1;

    for (int i = 1; i <= m; i ++ ) {
        for (int j = 1; j <= n; j ++ ) {
            if (j % i == 0) a[j] = !a[j];
        }
    }

    bool flag = true;
    for (int i = 1; i <= n; i ++ ) {
        if (!a[i]) {
            if (flag) {
                cout << i;
                flag = false;
            }
            else {
                cout << ',' << i;
            }
        }
    }

    return 0;
}
1110 查找特定的值
#include <iostream>
using namespace std;

int main() {
    int n, x, a[10005];

    cin >> n;

    for (int i = 1; i <= n; i ++ ) cin >> a[i];

    cin >> x;

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

    cout << -1 << endl;

    return 0;
}
1111 不高兴的津津
#include <iostream>
using namespace std;

int main() {
    int a, b, max = 8, day = 0;

    for (int i = 1; i <= 7; i ++ ) {
        cin >> a >> b;
        if (a + b > max) {
            max = a + b;
            day = i;
        }
    }

    if (day > 0) cout << day << endl;
    else cout << 0 << endl;

    return 0;
}
1112 最大值和最小值的差
#include <iostream>
#include <algorithm>
using namespace std;

int main() {
    int m, x, a[10005], maxx = 0, minn = 10000;

    cin >> m;

    for (int i = 0; i < m; i ++ ) {
        cin >> x;
        maxx = max(maxx, x);
        minn = min(minn, x);
    }

    cout << maxx - minn << endl;

    return 0;
}
1113 不与最大数相同的数字之和
#include <iostream>
#include <algorithm>
using namespace std;

int main() {
    int n, a[105], maxx = 0, sum = 0;

    cin >> n;

    for (int i = 0; i < n; i ++ ) {
        cin >> a[i];
        maxx = max(maxx, a[i]);
    }

    for (int i = 0; i < n; i ++) {
        if (a[i] != maxx) sum += a[i];
    }

    cout << sum << endl;

    return 0;
}
1114 白细胞计数
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;

int main() {
    int n;
    double a[305], avg, diff = 0;

    scanf("%d", &n);
    scanf("%lf", &a[0]);
    double minn = a[0], maxx = a[0], sum = a[0];

    for (int i = 1; i < n; i ++ ) {
        scanf("%lf", &a[i]);
        maxx = max(maxx, a[i]);
        minn = min(minn, a[i]);
        sum += a[i];
    }

    avg = (sum - maxx - minn) / (n - 2);

    bool flag1 = true, flag2 = true;
    for (int i = 0; i < n; i ++ ) {
        if (a[i] == maxx && flag1) {
            flag1 = false;
        }
        else if (a[i] == minn && flag2) {
            flag2 = false;
        }
        else {
            diff = max(diff, abs(a[i] - avg));
        }
    }

    printf("%.2lf %.2lf\n", avg, diff);

    return 0;
}
1115 直方图
#include <iostream>
#include <algorithm>
using namespace std;

int n, a[10005], fmax = 0;

int main() {

    cin >> n;

    for (int i = 0; i < n; i ++ ) {
        int t;
        cin >> t;
        a[t] ++;
        fmax = max(fmax, t);
    }

    for (int i = 0; i <= fmax; i ++ ) cout << a[i] << endl;

    return 0;
}
1116 最长平台
#include <iostream>
#include <algorithm>
using namespace std;

int main() {
    int n, a, b, cnt = 1, maxx = 0;
    cin >> n;
    cin >> a;

    for (int i = 1; i < n; i ++ ) {
        cin >> b;
        if (b == a) {
            cnt ++;
            maxx = max(maxx, cnt);
        }
        else {
            cnt = 1;
        }

        a = b;
    }

    cout << maxx << endl;

    return 0;
}
1117 整数去重
#include <iostream>
using namespace std;

int main() {
    int n, x, a[5005] = {};

    cin >> n;

    for (int i = 0; i < n; i ++ ) {
        cin >> x;
        if (!a[x]) {
            cout << x << ' ';
            a[x] = 1;
        }
    }

    return 0;
}
1118 铺地毯
#include <iostream>
using namespace std;

int main(){
    int n, a[10005][4];
    cin >> n;

    for (int i = 1; i <= n; i ++ ) {
        for (int j = 0; j < 4; j ++ ){
            cin >> a[i][j];
        }
    }

    int x, y;
    cin >> x >> y;

    for (int i = n; i >= 1; i -- ) {
        if (x >= a[i][0] && x <= a[i][0] + a[i][2] && y >= a[i][1] && y <= a[i][1] + a[i][3]) {
            cout << i << endl;
            return 0;
        }
    }

    cout << -1 << endl;

    return 0;
}

如果您的孩子四年级及以上,对计算机编程感兴趣,且文化课学有余力,欢迎联系客服(微信号:xiaolan7321),参加信息学的学习。我们是专业的信息学竞赛教练,采用线上小班授课的方式,目标是帮助热爱编程的中小学生,在国内外信息学竞赛中取得优秀成绩。

教学特点:

  • 线上小班授课,打好代码基础。避免大班课堂上学生要么“跟不上”,要么“吃不饱”的问题。

  • 教学经验丰富,熟悉学生的知识结构与学习能力,合理安排进度。

  • 以赛代练,通过考级与比赛,不断提高学生能力。

猜你喜欢

转载自blog.csdn.net/davidliule/article/details/106139538