| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
乐学 会学 多求 善思千里之行 始于足下
共有 108 人关注过本帖
标题:【求助】数学黑洞问题(请使用c++)
只看楼主 加入收藏
asdfaad
Rank: 1
来 自:重庆
等 级:新手上路
帖 子:21
专家分:0
注 册:2018-12-21
结帖率:60%
  已结贴   问题点数:10  回复次数:3   
【求助】数学黑洞问题(请使用c++)
题目描述
已知:一个任意的四位正整数。将数字重新组合成一个最大的数和最小的数相减,重复这个过程,最多七步,必得6174。即:7641-1467=6174。将永远出不来。

输入一个四位数(不会出现全部相同的),输出它变成6174的过程,并输出步数

输入
一行:一个四位数(不会出现全部相同的)

输出
假设一共需要n步才能完成变化

开始n行,每行描述一个变化

最后再输出n

样例输入
1234
样例输出
4321-1234=3087
8730-378=8352
8532-2358=6174
3
2019-02-10 20:37
Canvas
Rank: 2
等 级:论坛游民
帖 子:8
专家分:10
注 册:2019-2-13
  得分:0 
大一新生非计算机专业,刚学C++,使用的是VS2017,如有不当之处请多指教ฅʕ•̫͡•ʔฅ。
#include "pch.h"//VS2017
#include <iostream>
using namespace std;
int Step = 0;//步数


bool Check(int Origin)//检验输入的数字是否违规
{
    bool b = true;
    if (Origin < 1000 || Origin > 9999)
        b = false;
    else if (Origin % 1111 == 0)//检验是否为1111、2222、3333……9999
        b = false;
    return b;
}


int Sort(int Origin)//重排四位数
{
    int Max, Min;//重排后最大、最小值
    int Temp[4];
    for (int i = 0; i < 4; i++)
    {
        Temp[i] = Origin % 10;
        Origin /= 10;
    }//Temp【4】中储存每位数字
    for (int i = 0; i < 4; i++)
    {
        for (int j = i + 1; j < 4; j++)
            if (Temp[i] < Temp[j])
            {
                int t;
                t = Temp[i]; Temp[i] = Temp[j]; Temp[j] = t;
            }
    }//Temp【4】从大到小排好
    Max = 1000 * Temp[0] + 100 * Temp[1] + 10 * Temp[2] + Temp[3];
    Min = 1000 * Temp[3] + 100 * Temp[2] + 10 * Temp[1] + Temp[0];
    int Next = Max - Min;//下次数字
    cout << Max << "-" << Min << "=" << Next << endl;//输出减法算式
    return Next;//返回下次数字
}


int main()
{
    int x;
    cin >> x;
    if (Check(x) == false)
    {
        cout << "输入四位数违规!";
        exit(1);
    }
    while (1)
    {
        x = Sort(x);
        Step++;
        if (x == 6174)
            break;//当结果为6174时跳出循环
    }
    cout << Step << endl;//输出步数
}
7 天前 15:03
Canvas
Rank: 2
等 级:论坛游民
帖 子:8
专家分:10
注 册:2019-2-13
  得分:0 
发现有程序代码回复模式( •̀ ω •́ )y,试一下
程序代码:
#include "pch.h"
#include <iostream>
using namespace std;
int Step = 0;//步数


bool Check(int Origin)//检验输入的数字是否违规
{
    bool b = true;
    if (Origin < 1000 || Origin > 9999)
        b = false;
    else if (Origin % 1111 == 0)//检验是否为1111、2222、3333……9999
        b = false;
    return b;
}


int Sort(int Origin)//重排四位数
{
    int Max, Min;//重排后最大、最小值
    int Temp[4];
    for (int i = 0; i < 4; i++)
    {
        Temp[i] = Origin % 10;
        Origin /= 10;
    }//Temp【4】中储存每位数字
    for (int i = 0; i < 4; i++)
    {
        for (int j = i + 1; j < 4; j++)
            if (Temp[i] < Temp[j])
            {
                int t;
                t = Temp[i]; Temp[i] = Temp[j]; Temp[j] = t;
            }
    }//Temp【4】从大到小排好
    Max = 1000 * Temp[0] + 100 * Temp[1] + 10 * Temp[2] + Temp[3];
    Min = 1000 * Temp[3] + 100 * Temp[2] + 10 * Temp[1] + Temp[0];
    int Next = Max - Min;//下次数字
    cout << Max << "-" << Min << "=" << Next << endl;//输出减法算式
    return Next;//返回下次数字
}


int main()
{
    int x;
    cin >> x;
    if (Check(x) == false)
    {
        cout << "输入四位数违规!";
        exit(1);
    }
    while (1)
    {
        x = Sort(x);
        Step++;
        if (x == 6174)
            break;//当结果为6174时跳出循环
    }
    cout << Step << endl;//输出步数
}
7 天前 15:08
Canvas
Rank: 2
等 级:论坛游民
帖 子:8
专家分:10
注 册:2019-2-13
  得分:10 
发现有程序代码回复模式( •̀ ω •́ )y,试一下
程序代码:
#include "pch.h"
#include <iostream>
using namespace std;
int Step = 0;//步数


bool Check(int Origin)//检验输入的数字是否违规
{
    bool b = true;
    if (Origin < 1000 || Origin > 9999)
        b = false;
    else if (Origin % 1111 == 0)//检验是否为1111、2222、3333……9999
        b = false;
    return b;
}


int Sort(int Origin)//重排四位数
{
    int Max, Min;//重排后最大、最小值
    int Temp[4];
    for (int i = 0; i < 4; i++)
    {
        Temp[i] = Origin % 10;
        Origin /= 10;
    }//Temp【4】中储存每位数字
    for (int i = 0; i < 4; i++)
    {
        for (int j = i + 1; j < 4; j++)
            if (Temp[i] < Temp[j])
            {
                int t;
                t = Temp[i]; Temp[i] = Temp[j]; Temp[j] = t;
            }
    }//Temp【4】从大到小排好
    Max = 1000 * Temp[0] + 100 * Temp[1] + 10 * Temp[2] + Temp[3];
    Min = 1000 * Temp[3] + 100 * Temp[2] + 10 * Temp[1] + Temp[0];
    int Next = Max - Min;//下次数字
    cout << Max << "-" << Min << "=" << Next << endl;//输出减法算式
    return Next;//返回下次数字
}


int main()
{
    int x;
    cin >> x;
    if (Check(x) == false)
    {
        cout << "输入四位数违规!";
        exit(1);
    }
    while (1)
    {
        x = Sort(x);
        Step++;
        if (x == 6174)
            break;//当结果为6174时跳出循环
    }
    cout << Step << endl;//输出步数
}
7 天前 15:08







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.045201 second(s), 8 queries.
Copyright©2004-2019, BCCN.NET, All Rights Reserved