Loading

华东师大2023程序设计基础代码

Lab07 递归与函数

1. 正整数的各位数字之和

#include <stdio.h>
#include <math.h>
int sum(int a);
int main() {
    int a = 0;
    scanf("%d", &a);
    printf("%d", sum(a));
    return 0;
}
int sum(int a) {
    if (a < 10) {
        return a;
    }
    return sum(a / 10) + a % 10;
}

2. 逆序输出

#include <stdio.h>
#include <math.h>

void scan();

int main() {
    scan();
    return 0;
}

void scan() {
    int a = 0;
    scanf("%d", &a);
    if (a > 0) {
        scan();
        printf("%d ", a);
        return;
    }
    return;

}

3. 十进制转二进制

#include <stdio.h>
#include <math.h>

void print(int a);

int main() {
    int a = 0;
    scanf("%d", &a);
    print(a);
    return 0;
}

void print(int a) {
    if (a == 0){
        return;
    }
    if (a > 0) {
        print(a / 2);
        printf("%d",a%2);
    }
}


5. fibonacci函数

#include <stdio.h>
#include <stdlib.h>

int fibonacci(int a);

int main(void) {
    int a = 0;
    scanf("%d", &a);

    printf("%d", fibonacci(a));
    return 0;
}

int fibonacci(int a) {
    if (a == 0 || a == 1) {
        return a;
    }
    return fibonacci(a - 1) + fibonacci(a - 2);
}

6. *号构成的菱形图案

#include <stdio.h>
#include <stdlib.h>

void print(int a);

int main(void) {
    int n = 0, a = 0;
    scanf("%d", &n);

    for (int i = 0; i < n; i++) {
        scanf("%d", &a);
        print(a);
    }

    return 0;
}

void print(int a) {

    int b = a - 1;
    int c = 1;
    for (int i = 1; i <= a; i++) {

        for (int j = 1; j <= b; j++) {
            printf("  ");
        }
        b -= 1;
        for (int j = 1; j <= c; j++) {
            printf("* ");
        }
        c += 2;
        printf("\n");
    }

    b = 1;
    c = 2*a-3;;
    for (int i = 1; i <= a - 1; i++) {
        for (int j = 1; j <= b; j++) {
            printf("  ");
        }
        b += 1;
        for (int j = 1; j <= c; j++) {
            printf("* ");
        }
        c -= 2;
        printf("\n");
    }

}

7. 函数调用中的平均值

#include <stdio.h>
#include <stdlib.h>

float RunningAvg(float num);

int main() {

    float num;

    while (1) {
        scanf("%f", &num);
        if (num > 0) {
            printf("%.2f\n", RunningAvg(num));
        } else {
            break;
        }
    }
}

float RunningAvg(float num) {
    static float sum = 0;
    static int counter = 0;

    sum += num;
    counter++;

    return sum / counter;
}

8. 取模

#include <stdio.h>
#include <math.h>

int mod(int a);

int main(void) {
    int a = 0;
    scanf("%d", &a);
    printf("%d\n", mod(a));
    return 0;
}

int mod(int a) {
    if (a == 0 || a == 1) {
        return 1;
    }

    return mod(a - 1) * a % 20181111;
}
  1. 日期间相隔的天数
#include<stdio.h>

int sum(int y, int m, int d) {
    int i, count = 0;

    for (i = 0; i < y; ++i) {
        if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0) {
            count += 366;
        } else {
            count += 365;
        }
    }


    int month[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    for (i = 1; i <= m - 1; ++i) {
        if (i == 2) {
            if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0) {
                count += 29;
            } else {
                count += 28;
            }
        } else {
            count += month[i];
        }
    }
    count += d;


    return count;
}

int main() {
    int y1, y2, m1, m2, d1, d2;
    scanf("%d %d %d %d %d %d", &y1, &m1, &d1, &y2, &m2, &d2);
    printf("采集时间为%d天\n", sum(y2, m2, d2) - sum(y1, m1, d1));

}

Lab08 数组的基础与应用

9. 长度最小的连续子数组

#include <stdio.h>

int min(int a, int b);

int main() {
    int n;
    scanf("%d",&n);

    int a[10];
    for(int i = 0;i<n;i++){
        scanf("%d",&a[i]);
    }

    int s = 7;
    scanf("%d",&s);

    int left = 0,right = 0,  sum = 0, min_length = 10000;

    while (right < n) {
        sum += a[right];
        while (sum >= s) {
            min_length = min(min_length, right - left + 1);
            sum -= a[left];
            left++;
        }
        right++;
    }

    printf("%d", min_length<10000?min_length:0);

    return 0;
}

int min(int a, int b) {
    return a <= b ? a : b;
}

6. 删除数组元素

#include<stdio.h>

int main() {
    int n;
    scanf("%d", &n);

    int data[n];
    for (int i = 0; i < n; i++) {
        scanf("%d", &data[i]);
    }

    int target;
    scanf("%d", &target);

    int index = -1;
    for (int i = 0; i < n; i++) {
        if (data[i] == target) {
            index = i;

            for (int j = i; j < n - 1; j++) {
                data[j] = data[j + 1];
            }

            break;

        }
    }

    if (index == -1) {
        printf("ERROR");
    } else {
        for (int i = 0; i < n - 1; i++)
            printf("%d ", data[i]);
    }

}

10. 求最长平台

#include<stdio.h>

int max(int a, int b);

int main(void) {

    int n = 0;
    scanf("%d", &n);

    int a[n];
    for (int i = 0; i < n; i++) {
        scanf("%d", &a[i]);
    }

    int length = 0, max_length = 0;
    for (int i = 0; i < n; i++) {
        if (i == 0) {
            length = 1;
        } else {
            if (a[i] == a[i - 1]) {
                length++;
            } else {
                length = 1;
            }
        }
        max_length = max(length, max_length);
    }
    printf("%d", max_length);

    return 0;
}

int max(int a, int b) {
    return a >= b ? a : b;
}

我的评分

#include<stdio.h>

double max(double a, double b);

double min(double a, double b);

int main() {
    int n;
    scanf("%d", &n);

    double score, MIN=1000000001, MAX=-1, sum = 0;

    for (int i = 0; i < n; i++) {
        scanf("%lf", &score);
        MAX = max(MAX, score);
        MIN = min(MIN, score);
        sum += score;
    }

    printf("%.2f", (sum - MIN - MAX) / (n - 2));
}

double max(double a, double b) {
    return a >= b ? a : b;
}

double min(double a, double b) {
    return a < b ? a : b;
}

三数之和

#include<stdio.h>
#include <stdbool.h>

bool not_in(int d[10][3], int length, int a, int b, int c);

int main(void) {
    int t, a[10], d[10][3],
            a_index = 0, d_length = 0;

    while (scanf("%d", &t) == 1) {

        a[a_index] = t;
        a_index++;

    }

    for (int i = 0; i < a_index; i++) {
        for (int j = i + 1; j < a_index; j++) {
            for (int k = j + 1; k < a_index; k++) {
               

                if (a[i] + a[j] + a[k] == 0 && not_in(d, d_length, a[i], a[j], a[k])) {
                    printf("%d %d %d\n", a[i], a[j], a[k]);
                    d[d_length][0] = a[i];
                    d[d_length][1] = a[j];
                    d[d_length][2] = a[k];
                    d_length++;
                }

            }

        }
    }
    return 0;
}

bool not_in(int arr[10][3], int length, int a, int b, int c) {
    for (int i = 0; i < length; i++) {
        if ((arr[i][0] == a && arr[i][1] == b && arr[i][2] == c) ||
            (arr[i][0] == a && arr[i][1] == c && arr[i][2] == b) ||
            (arr[i][0] == b && arr[i][1] == a && arr[i][2] == c) ||
            (arr[i][0] == b && arr[i][1] == c && arr[i][2] == a) ||
            (arr[i][0] == c && arr[i][1] == a && arr[i][2] == b) ||
            (arr[i][0] == c && arr[i][1] == b && arr[i][2] == a)) {
            return false;
        }
    }
    return true;
}

posted @   Duancf  阅读(68)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示