[C语言]魔术师与3位数:在一种室内互动游戏中,魔术师要每位观众心里想一个3位数abc(a、b、c分别是百位、十位和个位数字),然后魔术师让观众心中记下acb、bac、bca、cab、cba五个数以及

在一种室内互动游戏中,魔术师要每位观众心里想一个3位数abc(a、b、c分别是百位、十位和个位数字),然后魔术师让观众心中记下acb、bac、bca、cab、cba五个数以及这五个数的和值。只要观众说出这个和是多少,则魔术师一定能猜出观众心里想的原数abc是多少。例如观众甲说他计算的和值是1999,则魔术师立即说出他想的数是443,而观众乙说他计算的和值是1998,则魔术师说:“你算错了!”。请编程模拟这个数字魔术游戏。

输入

输入一个正整数。

输出

输出原数abc或者输出“error”(不输出引号)。

输入示例1

1999

输出示例1

443

输入示例2

1998

输出示例2

error

输入示例3

555

输出示例3

111

数据范围

输入输出均为int范围的正整数

简单的穷举法即可解决,或者使用四个三元一次方程来求唯一解,但较为麻烦,

所以我们这里采用第一种方法,即穷举法:

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

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

    int a, b, c;
    int count = 0;

    for (a = 1; a <= 9; a++) {
        for (b = 0; b <= 9; b++) {
            for (c = 0; c <= 9; c++) {
                int acb = a * 100 + c * 10 + b;
                int bac = b * 100 + a * 10 + c;
                int bca = b * 100 + c * 10 + a;
                int cab = c * 100 + a * 10 + b;
                int cba = c * 100 + b * 10 + a;

                if (acb + bac + bca + cab + cba == sum) {
                    count++;
                    if (count == 1) {
                        printf("%d%d%d\n", a, b, c);
                    } else {
                        printf("error\n");
                        return 0;
                    }
                }
            }
        }
    }

    if (count == 0) {
        printf("error\n");
    }

    return 0;
}

解法不唯一,仅供参考

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值