第4关:循环结构:黑洞陷阱

编程要求

在右侧编辑器中的Begin-End之间补充代码,获取输入的一个小于1000且三个数字不全相等的整数(数据由平台提供,你需获取后使用),并输出进入黑洞的重排求差过程。

测试说明

平台会对你编写的代码进行测试,比对你输出的数值与实际正确数值,只有所有数据全部计算正确才能通过测试:

测试输入:123
预期输出:
1:321-123=198
2:981-189=792
3:972-279=693
4:963-369=594
5:954-459=495

测试输入:18
预期输出:
1:810-18=792
2:972-279=693
3:963-369=594
4:954-459=495

// 包含两种I/O库,可以使用任一种输入输出方式
#include <stdio.h>
#include <iostream>

using namespace std;

/**
 * 获取一个数字的每位数的数组,不足三位补 0
 * @param num
 */
int *getDigits(int num) {
    int *digits = new int[3];
    if (num < 10) {
        digits[0] = num;
        digits[1] = digits[2] = 0;
    } else if (num < 100) {
        digits[0] = num / 10;
        digits[1] = num % 10;
        digits[2] = 0;
    } else if (num < 1000) {
        digits[0] = num / 100;
        digits[1] = (num / 10) % 10;
        digits[2] = num % 10;
    }
    return digits;
}

/**
 * 获取最大值
 * @param nums
 * @return
 */
int getMax(const int nums[3]) {
    int max = 0;
    for (int i = 0; i < 3; ++i) {
        max = max > nums[i] ? max : nums[i];
    }
    return max;
}

/**
 * 获取最小值
 * @param nums
 * @return
 */
int getMin(const int nums[3]) {
    int min = 10;
    for (int i = 0; i < 3; ++i) {
        min = min < nums[i] ? min : nums[i];
    }
    return min;
}

/**
 * 一个数重组后的最大值
 * @param num
 * @return
 */
int getMaxNum(int num) {
    int *digits = getDigits(num);
    int max = getMax(digits);
    int min = getMin(digits);
    int mid = digits[0] + digits[1] + digits[2] - max - min;
    return max * 100 + mid * 10 + min;
}

/**
 * 一个数重组后的最小值
 * @param num
 * @return
 */
int getMinNum(int num) {
    int *digits = getDigits(num);
    int max = getMax(digits);
    int min = getMin(digits);
    int mid = digits[0] + digits[1] + digits[2] - max - min;
    return max + mid * 10 + min * 100;
}

int main() {
    int n;
    // 请在此添加代码,输出整数进入黑洞过程
    /********** Begin *********/
    int max, min, index = 0;
    cin >> n;
    while (n != 495) {
        index++;
        max = getMaxNum(n);
        min = getMinNum(n);
        n = max - min;
        cout << index << ":" << max << "-" << min << "=" << n << endl;
    }
    /********** End **********/
    return 0;
}

123
1:321-123=198
2:981-189=792
3:972-279=693
4:963-369=594
5:954-459=495

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: while循环是一种常见的循环结构,它的语法格式为: while (条件表达式) { 循环体语句; } 当条件表达式为真时,就会执行循环体语句,然后再次判断条件表达式的真假,如果为真就继续执行循环体语句,直到条件表达式为假时,循环结束。 while循环适用于需要重复执行某些操作,但不知道具体执行次数的情况。需要注意的是,如果条件表达式一直为真,那么while循环就会一直执行下去,可能会导致死循环的问题。因此,在使用while循环时,一定要确保条件表达式能够在某个时刻变为假,从而结束循环。 ### 回答2: Java是一种广泛使用的面向对象的编程语言,同时也是一种很好的学习编程的入门语言。Java中的循环结构非常重要,它能让程序员实现重复执行代码的功能。 在Java中,while循环是一种重复执行代码的循环结构,它的语法格式如下: while (布尔表达式) { 循环内容 } while循环会重复地执行循环内容,直到布尔表达式为false为止。因此,在while循环中,布尔表达式非常重要,它控制着循环的执行次数。 如果布尔表达式为true,则一直执行循环内容;如果布尔表达式为false,则不执行循环内容,直接跳出while循环。因此,程序员在设计布尔表达式时一定要非常小心,避免造成死循环的情况。 在while循环中,循环内容可以是任何合法的Java语句,包括赋值语句、条件语句、函数调用、循环语句等。 while循环可以非常灵活地运用在各种场景中,例如读取文件、遍历集合、处理数组等。 需要注意的是,如果while循环的布尔表达式一开始就是false,则循环内的代码不会执行。因此,程序员在使用while循环时一定要考虑好循环条件,确保循环能够正确执行。 最后,需要提醒的是,在编写while循环时,要注意程序的效率,避免写出不必要的循环。因为循环次数过多会降低程序的执行效率,从而影响程序的性能。因此,在编写while循环时,要注意代码的设计和优化,避免出现性能问题。 ### 回答3: Java循环结构中的while循环是一种在满足条件的情况下重复执行代码块的结构。首先,while循环会先检查循环条件是否成立,只有当条件为真时,代码块才会继续执行。当代码块执行完毕后,会再次检查循环条件,若条件依然为真,则代码块会再次执行,直到循环条件变为假,才会跳出while循环。 在while循环中,我们使用一个布尔表达式作为循环条件,这个布尔表达式的语法和其他语言是一样的。例如,在java中我们可以使用比较运算符、逻辑运算符、位运算符等等来构建一个布尔表达式,只有当这个表达式的值为true时,循环代码块才会执行。 另外,在while循环中,我们可以使用break语句来强制跳出循环,或者使用continue语句来跳过当前迭代并直接开始下一次迭代。 需要注意的一点是,在使用while循环时我们需要确保循环条件最终会变为假,否则循环会变为无限循环,导致程序崩溃。为了避免这种情况的发生,我们通常会使用计数器或者布尔变量等进行控制,从而保障程序不会进入死循环。 总的来说,while循环结构在Java中是一个非常强大、灵活的工具,可以帮助我们轻松实现重复的任务和迭代操作,让编程更加高效和有效。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小海不再神清气爽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值