weixin_41429120 2021-08-15 18:51 采纳率: 34.6%
浏览 220
已结题

NOIP C++ 好数"(计数)

开始编程
题目描述
【题目描述】
一个只由1 \sim m1∼m数码组成的nn位数, 如果任意两个相邻数之差的绝对值都不超过dd,则称这个数是一个"dd好数".
给出n,m,dn,m,d,输出nn位"dd好数"的个数. dd的值只可能取1,2,3.
输入格式
1行,3个正整数n,m,dn,m,d
输出格式
输出nn位"dd好数"的个数.

输入样例#1
输入样例#1
5 3 1
输出样例#1

99

img

  • 写回答

4条回答 默认 最新

  • 墨&语 2021-08-16 19:56
    关注

    我用的是C语言,写完才发现是c++。。。,不过思路都是一样的,只是输入输出需要修改

    
    /*-----------------------------------------------
    程序思路:
      先确定最高位的值,再根据前一位确定后一位的值,一直递归,直至个位,
    当到个位时说明这是一个“好数”,计数加一
    -------------------------------------------------*/
    #include<stdio.h>
    
    int times=0;
    
    void count(int num,int n,int m,int d);
    
    void main()
    {
        int n,m,d;
        int number1=0;
        printf("位数:");
        scanf("%d",&n);
        printf("数码范围1~m:");
        scanf("%d",&m);
        printf("取值范围:");
        scanf("%d",&d);
        for(number1=1;number1<=m;number1++)        //确定第一位数
        {
            count(number1,n-1,m,d);            //确定下一位数
        }
        printf("d好数个数:%d\n",times);
    }
    
    void count(int num,int n,int m,int d)
    {
        int number2=num-d;        //本位数字最小值为前一位减d
        if(number2<1)            //避免小于1
            number2=1;
        if(n>1)                    //如果未到个位,继续递归
        {
            for(;number2<=num+d&&number2<=m;number2++)        //本位最大值为前一位加d且不能超过m
            {
                count(number2,n-1,m,d);        //确定下一位数
            }
        }
        else
        {
            for(;number2<=num+d&&number2<=m;number2++)        //根据前一位确定个位数字的值,“好数”计数加1
            {
                times++;
            }
        }
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 8月25日
  • 已采纳回答 8月17日
  • 创建了问题 8月15日

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!