甜羊羊. 2023-09-02 22:02 采纳率: 45.5%
浏览 4
已结题

问题 18E: 数的计数

问题 18E: 数的计数
内存限制:128 MB

题目描述
我们要求找出具有下列性质数的个数(包含输入的自然数n):
先输入一个自然数n(n≤1000), 然后对此自然数按照如下方法进行处理:

1.不作任何处理;

2.在它的左边加上一个自然数,但该自然数不能超过原数的一半;

3.加上数后,继续按此规则进行处理,直到不能再加自然数为止。
输入
输入一个自然数n(n≤1000)
输出
输出具有题目描述性质数的个数

样例输入
6
样例输出
6

满足条件的数分别为 6 16 26 126 36 136

求大2佬指点~

  • 写回答

2条回答 默认 最新

  • threenewbee 2023-09-02 22:57
    关注
    #include <iostream>
    using namespace std;
    
    int cnt;
    
    int add(int n)
    {
        if (n <= 0) return -1;
        int x = 0;
        int arr[20];
        while (n > 0)
        {
            arr[x++] = n % 10;
            n /= 10;
        }
        if (arr[x - 1] == 1)
        {
            return -1;
        }
        else
        {
            int newnum = 0;
            arr[x] = arr[x - 1] / 2;
            for (int i = x; i >= 0; i--)
            {
                newnum *= 10;
                newnum += arr[i];
            }
            return newnum;
        }
    }
    int next(int n)
    {
        if (n <= 10) return -1;
        int x = 0;
        int arr[20];
        while (n > 0)
        {
            arr[x++] = n % 10;
            n /= 10;
        }
        if (arr[x - 1] <= 1)
        {
            return -1;
        }
        else
        {
            int newnum = 0;
            arr[x - 1] = arr[x - 1] - 1;
            for (int i = x - 1; i >= 0; i--)
            {
                newnum *= 10;
                newnum += arr[i];
            }
            return newnum;
        }
    }
    int op(int n, int type)
    {
        if (type == 0)
        {
            //cout << n << " ";
            cnt = 1;
            op(n, 1);
        }
        else if (type == 1)
        {
            int a = n;
            while (1)
            {
                a = add(a);
                if (a == -1) break;
                op(a, 2);
                //cout << a << " ";
                cnt++;
            }
        }
        else
        {
            int a = n;
            while (1)
            {
                a = next(a);
                if (a == -1) break;
                op(a, 1);
                //cout << a << " ";
                cnt++;
            }     
        }
        return 0;        
    }
    int main()
    {
        int n;
        cin >> n;
        op(n, 0);
        cout << cnt;
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月11日
  • 已采纳回答 9月3日
  • 创建了问题 9月2日

悬赏问题

  • ¥15 verilog 非阻塞赋值下的移位拼接错误
  • ¥100 两个按钮控制一个LED
  • ¥15 用C语言写离散数学相关问题
  • ¥30 如何用python的GephiStreamer连接到gephi中,把Python和Gephi的具体操作过程都展示,重点回答Gephi软件的调试,以及如果代码的端口在浏览器中无法显示怎么处理
  • ¥15 ansys机翼建模肋参数
  • ¥15 Sumo软件无法运行
  • ¥15 如何在vscode里搭建stata的编辑环境?
  • ¥15 dify知识库创建问题
  • ¥15 如何用C#的chart画1000万个点不卡顿
  • ¥15 爬虫技术找到网上看过房源客户的电话