You are on page 1of 2

第一题 数据格式

输出 浮点数据 的 二进制表达形式
提示:使用 C 语言中数据结构 联合 union ,定义方式和 结构 struct 相同,使用方式也很
相似
#include <stdio.h>
#include <stdint.h>

union Float {
    float f;
    uint32_t i;
};

int main() {
    union Float num;
    scanf("%f", &num.f);
    printf("浮点数的值为: %f\n", num.f);
    printf("二进制表示为: ");
    for (int i = 31; i >= 0; i--) {
        printf("%d", (num.i >> i) & 1);
    }
    printf("\n");
    return 0;
}
设计思路:通过共用体,将浮点数的 ieee754 机器码原封不动转移到一个整数中,当作二进
制整数处理,通过位运算,每次循环一位,最后把 32 位都输出出来。
第二题 杨辉三角应用

问题一、图书馆门口的台阶有 25 阶,一步一阶或者一步两阶,有多少种不同的通过方式?
#include<stdio.h>

int main()
{
    int ways[31] = {0};
    ways[1] = 1;
    ways[2] = 2;
    for (int i = 3; i <= 25;i++)
    {
        ways[i] = ways[i - 1] + ways[i - 2];
    }
    printf("方法总数为:%d\n", ways[25]);
    return 0;
}
设计思路:考虑某一级台阶,它的方法总数为前一级台阶的方法数+前两级台阶的方法数,
因为只能从这两个位置到达,因此使用循环每次更新一个位置的方法数,最后得到答案
121393

问题二、一条铁丝长度 50 米,需要把它截成一节节,每节最短 1 米,要求 任意 3 条 不


能组成三角形,求出最多节数的截断方案?
#include <stdio.h>

int main()
{
    int fibonacci[10] = {1, 1, 2, 3, 5, 8, 13, 21, 34, 55};
    int fibonacci_sum[10] = {0};
    for (int i = 0;i<10;i++)
    {
        for (int j = 0;j<=i;j++)
        {
            fibonacci_sum[i] += fibonacci[j];
        }
    }
    for (int i = 0; i < 10;i++)
    {
        if(fibonacci_sum[i]>50)
        {
            printf("%d\n", i);
            break;
        }
    }
    return 0;
}
设计思路:满足任意三个数字不能组成三角形的数列是斐波那契数列,因此直接从小到大
排列求前缀和,找到满足条件的 i 的最大值求解。

You might also like