KY15 abc、KY45 skew数

119 阅读1分钟

“开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 14 天,点击查看活动详情

KY15 abc

描述

设a、b、c均是0到9之间的数字,abc、bcc是两个三位数,且有:abc+bcc=532。求满足条件的所有a、b、c的值。

输入描述:

题目没有任何输入。

输出描述:

请输出所有满足题目条件的a、b、c的值。 a、b、c之间用空格隔开。 每个输出占一行。

#include <stdio.h>
    int main() {
        int x, y;
        for (int a = 0; a <= 9; a++) {
            for (int b = 0; b <= 9; b++) {
                for (int c = 0; c <= 9; c++) {
                    x = a * 100 + b * 10 + c;
                    y = b * 100 + c * 10 + c;
                    if (x+y == 532) {
                        printf("%d %d %d\n",a, b, c);
                    }
                }
            }
        }
        return 0;
    }

暴力枚举,三重循环,性能低了些


KY45 skew数

描述

在 skew binary 表示中,第 k 位的值 x[k] 表示 x[k]×(2^(k+1)-1)。每个位上的可能数字是 0 或 1,最后面一个非零位可以是 2,例如,10120(skew) = 1×(2^5-1) + 0×(2^4-1) + 1×(2^3-1) + 2×(2^2-1) + 0×(2^1-1) = 31 + 0 + 7 + 6 + 0 = 44。前十个 skew 数是 0、1、2、10、11、12、20、100、101、以及 102。

输入描述:

输入包括多组数据,每组数据包含一个 skew 数。

输出描述:

对应每一组数据,输出相应的十进制形式。结果不超过 2^31-1。

案例


输入:

10120
200000000000000000000000000000
10
1000000000000000000000000000000
11
100
11111000001110000101101102000

输出:

44
2147483646
3
2147483647
4
7
1041110737

#include <stdio.h>
#include <string.h>
#include <math.h>
#define N 50

int main() {
    char x[N];
    int len, i;
    int b;
    int skewX;

    while (scanf("%s", x) != EOF) {  //用字符串数组读入长数据

        len = strlen(x);
        skewX = 0;

        for (i = 0; i < len; i++) {
            b = x[i] - '0';         //提取每一位数字:ASCII码差值
            skewX += (pow(2, len - i) - 1) * b;
        }
        printf("%d\n", skewX);
    }
    return 0;
}