第三周周记

求特殊自然数

描述

一个十进制自然数,它的七进制与九进制表示都是三位数,且七进制与九进制的三位数码表示顺序正好相反。编程求此自然数,并输出显示。

输入

无。

输出

三行:
第一行是此自然数的十进制表示;
第二行是此自然数的七进制表示;
第三行是此自然数的九进制表示。

样例输入

(无)

样例输出

(不提供)
#include <stdio.h>

int main() {
    int n, a, b, c, d, temp;
    for (int i = 100; i <= 729; i++) {
        n = i;
        a = 0;
        int factor = 1;
        while (n > 0) {
            a += (n % 7) * factor;
            n /= 7;
            factor *= 10;
        }
        n = i;
        b = 0;
        factor = 1;
        while (n > 0) {
            b += (n % 9) * factor;
            n /= 9;
            factor *= 10;
        }
        temp = a;
        d = 0;
        while (temp > 0) {
            d = d * 10 + temp % 10;
            temp /= 10;
        }
        if (d == b) {
            printf("%d\n%d\n%d\n", i, a, b);
        }
    }
    return 0;
}

菲波那契数列

描述

菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。
给出一个正整数k,要求菲波那契数列中第k个数是多少。

输入

输入一行,包含一个正整数k。(1 <= k <= 46)

输出

输出一行,包含一个正整数,表示菲波那契数列中第k个数的大小

样例输入

19

样例输出

4181
#include <stdio.h>

int main() {
    int k;
    scanf("%d", &k);
    
    if (k == 1 || k == 2) {
        printf("1\n");
        return 0;
    }
    
    int a = 1, b = 1, fib;
    for (int i = 3; i <= k; i++) {
        fib = a + b;
        a = b;
        b = fib;
    }
    
    printf("%d\n", fib);
    return 0;
}

数字反转

描述

给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例2)。

输入

输入共 1 行,一个整数N。

-1,000,000,000 ≤ N≤ 1,000,000,000。

输出

输出共 1 行,一个整数,表示反转后的新数。

样例输入

样例 #1:
123

样例 #2:
-380

样例输出

样例 #1:
321

样例 #2:
-83
#include <stdio.h>

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

    if (n == 0) {
        printf("0");
        return 0;
    }

    if (n < 0) {
        printf("-");
        n = -n; // 取绝对值,方便处理
    }

    int leading_zero = 1; // 标记前导零
    while (n > 0) {
        a = n % 10;
        n /= 10;

        if (a != 0) {
            leading_zero = 0; // 遇到第一个非零数字
        }

        if (!leading_zero || a != 0) {
            printf("%d", a);
        }
    }

    return 0;
}

计算多项式的值

假定多式的形式为xn+xn-1+…+x2+x+1,请计算给定单精度浮点数x和正整数n值的情况下这个多项式的值。

输入

输入仅一行,包括x和n,用单个空格隔开。x在float范围内,n <= 1000000。

输出

输出一个实数,即多项式的值,精确到小数点后两位。保证最终结果在float范围内。

样例输入

2.0 4

样例输出

31.00
#include <stdio.h>

int main() {
    int n;
    float x, term = 1.0, sum = 1.0; // 初始化 sum 为 1,因为 x^0 = 1
    scanf("%f %d", &x, &n);
    for (int i = 1; i <= n; i++) {
        term *= x; // 连续乘以 x 来计算下一个项
        sum += term; // 将当前项加到总和中
    }
    printf("%.2f", sum); // 直接输出 sum,因为它已经包含了常数项 1
    return 0;
}

开关灯

描述

假设有N盏灯(N为不大于5000的正整数),从1到N按顺序依次编号,初始时全部处于开启状态;有M个人(M为不大于N的正整数)也从1到M依次编号。

第一个人(1号)将灯全部关闭,第二个人(2号)将编号为2的倍数的灯打开,第三个人(3号)将编号为3的倍数的灯做相反处理(即,将打开的灯关闭,将关闭的灯打开)。依照编号递增顺序,以后的人都和3号一样,将凡是自己编号倍数的灯做相反处理。

请问:当第M个人操作之后,哪几盏灯是关闭的,按从小到大输出其编号,其间用逗号间隔。

输入

输入正整数N和M,以单个空格隔开。

输出

顺次输出关闭的灯的编号,其间用逗号间隔。

样例输入

10 10

样例输出

1,4,9
#include <stdio.h>
#include <stdbool.h>

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

    // 初始化灯的状态为开启
    bool lights[N+1];
    for (int i = 1; i <= N; i++) {
        lights[i] = true;
    }

    // 模拟每个人的操作
    for (int person = 1; person <= M; person++) {
        for (int i = person; i <= N; i += person) {
            lights[i] = !lights[i]; // 翻转灯的状态
        }
    }

    // 输出结果
    bool first = true;
    for (int i = 1; i <= N; i++) {
        if (!lights[i]) { // 如果灯是关闭状态
            if (!first) {
                printf(",");
            }
            printf("%d", i);
            first = false;
        }
    }
    printf("\n");

    return 0;
}

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值