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

我用的是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;
}


#include<stdio.h>
#include<bits/stdc++.h>

using namespace std;

int times=0;

void count(int num,int n,int m,int d)
{
    int number2=num-d;    
    if(number2<1)           
        number2=1;
    if(n>1)        
    {
        for(;number2<=num+d&&number2<=m;number2++)    
        {
            count(number2,n-1,m,d); 
        }
    }
    else
    {
        for(;number2<=num+d&&number2<=m;number2++)  
        {
            times++;
        }
    }
    return;
}
int main()
{
    int n,m,d;
    int number1=0;
    scanf("%d",&n);
    scanf("%d",&m);
    scanf("%d",&d);
    for(number1=1;number1<=m;number1++)   
    {
        count(number1,n-1,m,d);  
    }
    cout<<times;
}
 

好了,请采纳,谢谢

请问有链接吗

我不知道啥是数码