MT1301-MT1310 码题集 (c 语言详解)

MT1301·1的补码

c 语言代码实现

#include <stdio.h>
int main() {

    long n = 0;
    long b = 0;

    scanf("%ld", &n);
    int i = 0;
    // 
    while (b < n) {
        b = b * 16 + 0xf;
    }
    printf("%ld", b - n);

    return 0;
}

 MT1302·二进制转格雷码

c 语言代码实现

#include <stdio.h>
#include <string.h>
int main() {

    char s[10];
    fgets(s, sizeof(s), stdin);

    for (int a = 3; a >= 1; a--) {
        if(s[a] != s[a - 1]) s[a] = '1';
        else s[a] = '0';
    }
    printf("%s",s);
    return 0;
}

 MT1303·格雷码转二进制

c 语言代码实现 

#include <stdio.h>
#include <string.h>
int main() {
    char s[10];
    fgets(s, sizeof(s), stdin);
    for (int a = 1; a <= 3; a++) {
        if (s[a] != s[a - 1])
            s[a] = '1';
        else
            s[a] = '0';
    }
    printf("%s", s);
    return 0;
}

 MT1304·十进制与格雷码

 

c 语言代码实现

#include <stdio.h>
int main() {
    int n, cnt = 3, A[4], ans;
    scanf("%d", &n);
    while (n) {
        A[cnt--] = n % 2;
        n /= 2;
    }
    for (int a = 3; a >= 2; a--) {
        if (A[a] != A[a - 1])
            A[a] = 1;
        else
            A[a] = 0;
    }
    for (int b = 3, k = 1; b >= 1; b--, k = k * 2)
        ans += A[b] * k;
    printf("%d",ans);
    return 0;
}

 MT1305·三位数

C语言代码实现

 

#include <stdio.h>

int main() {
    int number;

    // 遍历可能的自然数范围
    for (number = 1; number < 729; number++) { // 729 是 9^3,最大三位数的九进制数
        // 获取七进制表示
        int base7 = number;
        int digit7[3];
        for (int i = 2; i >= 0; i--) {
            digit7[i] = base7 % 7;
            base7 /= 7;
        }
        
        // 获取九进制表示
        int base9 = number;
        int digit9[3];
        for (int i = 2; i >= 0; i--) {
            digit9[i] = base9 % 9;
            base9 /= 9;
        }
        
        // 检查七进制和九进制是否反向相等
        if (digit7[0] == digit9[2] && digit7[1] == digit9[1] && digit7[2] == digit9[0]) {
            printf("%d\n", number);
        }
    }

    return 0;
}

MT1306·牛顿迭代法

 

 

c语言代码实现

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

double f(double x) {
    return 2 * x * x * x + 4 * x * x - 7 * x - 6;
}

double f_prime(double x) {
    return 6 * x * x + 8 * x - 7;
}

int main() {
    double x0 = 1.5; // 初始值
    double tolerance = 1e-6; // 收敛阈值
    double x1;

    // 牛顿迭代法
    do {
        x1 = x0 - f(x0) / f_prime(x0);
        if (fabs(x1 - x0) < tolerance) {
            break;
        }
        x0 = x1;
    } while (1);

    // 输出结果
    printf("%.6f\n", x1);
    
    return 0;
}

MT1307·对分法

c 语言代码实现 

#include <stdio.h>
double halving(double x) { return x * x - 6 * x - 1; }
int main() {
    double left = -10; // 区间左端点
    double right = 0;  // 区间右端点
    double middle;      // 中点
    double tolerance = 1e-6; // 收敛阈值

    if (halving(left) * halving(right) >= 0) {
        return 1;
    }

    // 二分法
    do {
        middle = (left + right) / 2; // 计算中点 可以提前计算
        if (halving(middle) == 0.0) {
            break; // 找到根
        } else if (halving(middle) * halving(left) < 0) {
            right = middle; // 根在左半区间
        } else {
            left = middle; // 根在右半区间
        }
    } while (right - left > tolerance); // 判断是否收敛
    // 输出结果
    printf("%.6f", middle);
    return 0;
}

MT1308·4个自然数

c语言代码实现

#include <stdio.h>

int main() {
    int p, q, r;

    // 遍历 p, q, r, s
    for (p = 2; p <= 4; p++) {
        for (q = p; q <= 6; q++) {
            for (r = q; r <= 12; r++) {
                int mem = p * q * r;
                int denominator = p * q * r - q * r - p * r - p * q;
                if (denominator)
                    if ((mem % denominator == 0) && (mem / denominator >= r))
                        printf("%d %d %d %d\n", p, q, r, mem / denominator);
            }
        }
    }

    return 0;
}

MT1309·最大和

c 语言代码实现

#include <stdio.h>
int main() {
    int length;
    scanf("%d", &length);
    int array[length];
    for (int i = 0; i < length; i++) {
        scanf("%d", &array[i]);
    }
    int max_current = array[0]; // 当前最大连续子序列
    int max_global = array[0];  // 全局最大

    for (int i = 1; i < length; i++) {
        max_current = (array[i] > max_current + array[i] ? array[i]: (max_current + array[i]));
        if(max_current > max_global){
            max_global = max_current;
        }
    }
    printf("%d",max_global);
    return 0;
}

MT1310·最大乘积

c语言代码实现

#include <stdio.h>

int main() {
    int N;
    // 输入数组长度
    scanf("%d", &N);

    long long int arr[N];
    // 输入数组元素
    for (int i = 0; i < N; i++) {
        scanf("%lld", &arr[i]);
    }

    long long int max = arr[0];
    for (int i = 0; i < N; i++) {
        long long int x = 1;
        for (int j = i; j < N; j++) {
            x *= arr[j];
            if (x > max)
                max = x;
        }
    }

    printf("%lld",max);

    return 0;
}

以上就是这期c语言内容的详解了 有其他的问题可以在评论区评论 或者私聊 看到一定回复 有其他关于计算机的所有问题都可以问 只需要一个小小的关注

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值