2.1 数组 参考代码

RonChen / 2023-07-24 / 原文

P5716 [深基3.例9] 月份天数

#include <cstdio>
int main()
{
    int days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    int y, m;
    scanf("%d%d", &y, &m);
    if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0) days[1] = 29;
    printf("%d\n", days[m - 1]);  
    return 0;
}

P1046 [NOIP2005 普及组] 陶陶摘苹果

#include <cstdio>
int main()
{
    int h[10];
    for (int i = 0; i < 10; i++) scanf("%d", &h[i]);
    int t;
    scanf("%d", &t);
    int ans = 0;
    for (int i = 0; i < 10; i++) {
        if (t + 30 >= h[i]) ans++;
    }
    printf("%d\n", ans);
    return 0;
}

P1089 [NOIP2004 提高组] 津津的储蓄计划

#include <cstdio>
int main()
{
    int b[13];
    for (int i = 1; i <= 12; i++) {
        scanf("%d", &b[i]);
    }
    int save = 0;
    int money = 0;
    for (int i = 1; i <= 12; i++) {
        money += 300;
        money -= b[i];
        if (money < 0) {
            printf("%d\n", -i);
            break;
        }
        save += money / 100 * 100;
        money = money % 100;
    }
    if (money >= 0) {
        money += save / 5 * 6;
        printf("%d\n", money);
    }
    return 0;
}

P1428 小鱼比可爱

#include <cstdio>
int main()
{
    int n;
    scanf("%d", &n);
    int a[105];
    for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
    for (int i = 1; i <= n; i++) {
        int x = 0;
        for (int j = 1; j < i; j++) {
            if (a[j] < a[i]) ++x;
        }
        printf("%d ", x);
    }
    return 0;
}

P1427 小鱼的数字游戏

#include <cstdio>
int main()
{
    int x;
    int a[105];
    int len = 0;
    while (scanf("%d", &x)) {
        if (x == 0) break;
        a[++len] = x;
    }
    for (int i = len; i >= 1; i--) printf("%d ", a[i]);
    return 0;
}

P5727 [深基5.例3] 冰雹猜想

#include <cstdio>
int main()
{
    int n;
    scanf("%d", &n);
    int a[1000];
    int len = 0;
    while (n != 1) {
        a[++len] = n;
        if (n % 2 == 1) n = 3 * n + 1;
            else n = n / 2;
    }
    printf("1");
    for (int i = len; i >= 1; i--) printf(" %d", a[i]);
    return 0;
}

P1047 [NOIP2005 普及组] 校门外的树

#include <cstdio>
int main()
{
    int l, m;
    int road[10005];
    scanf("%d%d", &l, &m);
    for (int i = 0; i <= l; i++) road[i] = 1;
    for (int i = 0; i < m; i++) {
        int u, v;
        scanf("%d%d", &u, &v);
        for (int j = u; j <= v; j++) road[j] = 0;
    }
    int ans = 0;
    for (int i = 0; i <= l; i++) ans += road[i];
    printf("%d\n", ans);
    return 0;
}

P5728 [深基5.例5] 旗鼓相当的对手

#include <cstdio>
int c[1005], m[1005], e[1005];
int main()
{
    int n;
    scanf("%d", &n);
    for (int i = 0; i < n; ++i)
        scanf("%d%d%d", &c[i], &m[i], &e[i]);
    int ans = 0;
    for (int i = 0; i < n; ++i)
        for (int j = i + 1; j < n; ++j) {
            int dc = c[i] - c[j];
            int dm = m[i] - m[j];
            int de = e[i] - e[j];
            int dsum = (c[i] + m[i] + e[i]) - (c[j] + m[j] + e[j]);
            if (dc >= -5 && dc <= 5)
                if (dm >= -5 && dm <= 5)
                    if (de >= -5 && de <= 5)
                        if (dsum >= -10 && dsum <= 10)
                            ans++;
        }
    printf("%d\n", ans);
    return 0;
}

P5729 [深基5.例7] 工艺品制作

#include <cstdio>
int a[25][25][25];
int main()
{
    int w, x, h;
    scanf("%d%d%d", &w, &x, &h);
    int q;
    scanf("%d", &q);
    int cur = w * x * h;
    while (q > 0) {
        q--;
        int x1, y1, z1, x2, y2, z2;
        scanf("%d%d%d%d%d%d", &x1, &y1, &z1, &x2, &y2, &z2);
        for (int i = x1; i <= x2; ++i)
            for (int j = y1; j <= y2; ++j)
                for (int k = z1; k <= z2; ++k) {
                    if (a[i][j][k] == 0) --cur;
                    a[i][j][k] = 1;
                }
    }
    printf("%d\n", cur);
    return 0;
}

P2550 [AHOI2001] 彩票摇奖

#include <cstdio>
int main()
{
    int n;
    scanf("%d", &n);
    int num[35] = {0};
    int award[10] = {0};
    for (int i = 0; i < 7; i++) {
        int id;
        scanf("%d", &id);
        num[id] = 1;
    }
    for (int i = 0; i < n; i++) {
        int hit = 0;
        for (int j = 0; j < 7; j++) {
            int id;
            scanf("%d", &id);
            if (num[id] == 1) hit++;
        }
        award[7 - hit]++;
    }
    for (int i = 0; i <= 6; i++) printf("%d ", award[i]);
    return 0;
}

P1554 梦中的统计

#include <cstdio>
int main()
{
    int m, n;
    scanf("%d%d", &m, &n);
    int cnt[10] = {0};
    for (int i = m; i <= n; i++) {
        int t = i;
        while (t > 0) {
            cnt[t % 10]++;
            t = t / 10;
        }
    }
    for (int i = 0; i <= 9; i++) printf("%d ", cnt[i]);
    return 0;
}

P1614 爱与愁的心痛

#include <cstdio>
#include <algorithm>
using namespace std;
const int MAXN = 3005;
const int INF = 1e9;
int a[MAXN];
int main()
{
	int n, m;
	scanf("%d%d", &n, &m);
	for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
	int ans = INF;
	for (int i = 1; i <= n - m + 1; i++) {
		int sum = 0;
		for (int j = i; j < i + m; j++) sum += a[j];
		ans = min(ans, sum);
	}
	printf("%d\n", ans);
	return 0;
}

P2911 [USACO08OCT] Bovine Bones G

#include <cstdio>
int main()
{
    int cnt[100] = {0};
    int s1, s2, s3;
    scanf("%d%d%d", &s1, &s2, &s3);
    for (int i = 1; i <= s1; ++i)
        for (int j = 1; j <= s2; ++j)
            for (int k = 1; k <= s3; ++k)
                cnt[i + j + k]++;
    int ans = 3, mx = 0;
    for (int i = 3; i <= s1 + s2 + s3; ++i) {
        if (cnt[i] > mx) {
            mx = cnt[i];
            ans = i;
        }
    }
    printf("%d\n", ans);
    return 0;
}

P5731 [深基5.习6] 蛇形方阵

#include <cstdio>
int main()
{
    int n;
    scanf("%d", &n);
    int s[10][10] = {0};
    int x = 1;
    int y = 1;
    int dx[4] = {0, 1, 0, -1};
    int dy[4] = {1, 0, -1, 0};
    int d = 0;  // 右0下1左2上3,当前方向为右
    s[1][1] = 1;
    int num = 2;
    while (num <= n * n) {
        int xx = x + dx[d];
        int yy = y + dy[d];
        if (xx >= 1 && xx <= n && yy >= 1 && yy <= n && s[xx][yy] == 0) {
            x = xx;
            y = yy;
            s[x][y] = num;
            num++;
        } else {
            d = (d + 1) % 4;
        }
    }
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) printf("%3d", s[i][j]);
        printf("\n");
    }
    return 0;
}

P5732 [深基5.习7] 杨辉三角

#include <cstdio>
int main()
{
    int n;
    int a[25][25] = {0};
    scanf("%d", &n);
    for (int i = 1; i <= n; i++) {
        a[i][1] = 1;
        a[i][i] = 1;
        for (int j = 2; j <= i - 1; j++) 
            a[i][j] = a[i - 1][j] + a[i - 1][j - 1];
    }
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= i; j++) printf("%d ", a[i][j]);
        printf("\n");
    }
    return 0;
}

P1789 [Mc生存] 插火把

#include <cstdio>
#include <algorithm>
using namespace std;
int main()
{
    int mp[105][105] = {0};
    int n, m, k;
    scanf("%d%d%d", &n, &m, &k);
    for (int i = 0; i < m; ++i) {
        int x, y;
        scanf("%d%d", &x, &y);
        mp[x][y] = true;
        for (int j = max(x - 2, 1); j <= min(x + 2, n); ++j) mp[j][y] = 1;
        for (int j = max(y - 2, 1); j <= min(y + 2, n); ++j) mp[x][j] = 1;
        for (int a = max(x - 1, 1); a <= min(x + 1, n); ++a)
            for (int b = max(y - 1, 0); b <= min(y + 1, n); ++b)
                mp[a][b] = 1;
    }
    for (int i = 0; i < k; ++i) {
        int x, y;
        scanf("%d%d", &x, &y);
        for (int a = max(x - 2, 1); a <= min(x + 2, n); ++a)
            for (int b = max(y - 2, 1); b <= min(y + 2, n); ++b)
                mp[a][b] = 1;
    }
    int ans = 0;
    for (int i = 1; i <= n; ++i)
        for (int j = 1; j <= n; ++j)
            if (mp[i][j] == 0) ++ans;
    printf("%d\n", ans);
    return 0;
}

P1319 压缩技术

#include <cstdio>
int main()
{
    int n;
    scanf("%d", &n);
    int num = 0;
    int x;
    int cnt = 0, sum = 0;
    while (sum != n * n) {
        scanf("%d", &x);
        for (int j = 0; j < x; j++) {
            printf("%d", num);
            cnt++;
            if (cnt == n) {
                printf("\n");
                cnt = 0;
            }
        }
        num = 1 - num;
        sum += x;
    }
    return 0;
}

P2615 [NOIP2015 提高组] 神奇的幻方

#include <cstdio>
int ans[50][50];
int main()
{
    int n;
    scanf("%d", &n);
    int x = 1, y = (n + 1) / 2;
    ans[x][y] = 1;
    for (int i = 2; i <= n * n; ++i) {
        if (x == 1 && y < n) {
            x = n;
            ++y;
        } else if (y == n && x > 1) {
            y = 1;
            --x;
        } else if (x == 1 && y == n) {
            ++x;
        } else if (x != 1 && y != n) {
            if (ans[x - 1][y + 1] == 0) {
                --x;
                ++y;
            } else ++x;
        }
        ans[x][y] = i;
    }
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) printf("%d ", ans[i][j]);
        printf("\n");
    }
    return 0;
}

P2141 [NOIP2014 普及组] 珠心算测验

#include <cstdio>
int main()
{
    int n;
    scanf("%d", &n);
    int a[105];
    int b[10005] = {0};
    for (int i = 0; i < n; i++) {
        scanf("%d", &a[i]);
        b[a[i]] = 1;
    }
    int ans = 0;
    for (int i = 0; i < n; i++) {
        for (int j = i + 1; j < n; j++) {
            int sum = a[i] + a[j];
            if (sum <= 10000 && b[sum] == 1) {
                ans++;
                b[sum]++;   //若有好几种方案能加出同一个数字,按题意只计一次答案
            }
        }
    }
    printf("%d\n", ans);
    return 0;
}