| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2454 人关注过本帖
标题:【求助】数学黑洞问题(请使用c++)
只看楼主 加入收藏
asdfaad
Rank: 1
来 自:重庆
等 级:新手上路
帖 子:25
专家分:0
注 册:2018-12-21
结帖率:57.14%
收藏
已结贴  问题点数:10 回复次数:4 
【求助】数学黑洞问题(请使用c++)
题目描述
已知:一个任意的四位正整数。将数字重新组合成一个最大的数和最小的数相减,重复这个过程,最多七步,必得6174。即:7641-1467=6174。将永远出不来。

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

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

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

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

最后再输出n

样例输入
1234
样例输出
4321-1234=3087
8730-378=8352
8532-2358=6174
3
搜索更多相关主题的帖子: 数学 c++ 输入 出现 输出 
2019-02-10 20:37
Canvas
Rank: 2
等 级:论坛游民
威 望:1
帖 子:10
专家分: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;//输出步数
}
2019-02-13 15:03
Canvas
Rank: 2
等 级:论坛游民
威 望:1
帖 子:10
专家分: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;//输出步数
}
2019-02-13 15:08
Canvas
Rank: 2
等 级:论坛游民
威 望:1
帖 子:10
专家分: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;//输出步数
}
2019-02-13 15:08
zoom_zzZ
Rank: 1
等 级:新手上路
威 望:1
帖 子:4
专家分:0
注 册:2019-2-21
收藏
得分:0 
回复 楼主 asdfaad
#include<iostream>
#include<algorithm>//使用sort函数必须的头文件
using namespace std;
int black(int n)
{
    int a[4],x,y;
    a[0]=n/1000;
    a[1]=(n-a[0]*1000)/100;
    a[2]=(n-a[0]*1000-a[1]*100)/10;
    a[3]=n-a[0]*1000-a[1]*100-a[2]*10;   
    sort(a,a+4);
    y=a[0]*1000+a[1]*100+a[2]*10+a[3];
    x=a[3]*1000+a[2]*100+a[1]*10+a[0];
    cout<<x<<"-"<<y<<"="<<(x-y)<<endl;
    return (x-y);
}
int main()
{
    int x,step=0;
    cin>>x;
    while(x!=6174)
    {
        x=black(x);
        step++;
    }
    cout<<step;
    return 0;
}
2019-02-22 18:36
快速回复:【求助】数学黑洞问题(请使用c++)
数据加载中...
 
   



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

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