优雅数P1351,深雪

描述

 

给定两个数L和R,求L到R之间(包括L和R)有多少个数是“优雅”的。

称一个数是优雅的,当且仅当把这个数看成一个长度为n的字符串(没有前导零),n个字符中 n-1 个字符全相同,有且仅有一个字符不同。

例如,33323、110都是优雅的,而9779、55555都不是优雅的。

输入描述

 

一行两个数L和R。

输出描述

 

一行一个数,表示L到R之间有多少个数是优雅的。

用例输入 1 

110 133

用例输出 1 

13、

样例解释:13个数是110、112、113、114、115、116、117、118、119、121、122、131、133.

数据范围:

对于50%数据: 100≤L≤R≤106

对于100%数据: 100≤L≤R≤1016

我的代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    char a[100],b[100];
    cin>>a>>b;
    int d=0,e=1,count=0;
    int c=strlen(a);
    int y=strlen(b);
    for(int i=0;i<c;i++)
    {
        for(int j=c-i-1;j>=1;j--)
        {
            e=10*e;
        }
        d=d+(int(a[i])-48)*e;
        e=1;
    }
    int n=1,l=0,i=0,j;
    for(i=0;i<y;i++)
    {
        for(j=y-i-1;j>=1;j--)
        {
            n=10*n;
        }
        l=l+(int(b[i])-48)*n;//b为l
        n=1;
    }
    if(d>=l)
    {
        for(int f=l;f<=d;f++)
        {
            int nb,abc,zh=0,qi=0,ling=1233,abcde=0;
            nb=f;
            abc=nb%10;
            nb/=10;
            while(nb>0)
            {
                if(nb%10!=abc)
                {
                    ling=nb%10;
                    break;
                }
                nb/=10;
            }
            int wc=f;
            while(wc>0)
            {
                if(wc%10!=ling and wc%10!=abc)
                {
                    abcde=1;
                }
                if(wc%10==abc)
                {
                    zh++;
                }
                if(wc%10==ling)
                {
                    qi++;
                }
                wc/=10;
            }
            if(abcde==1)
            {
                continue;
            }
            if(zh==1 or qi==1)
            {
                count=count+1;
            }
            
        }
        cout<<count;
    }
    if(d<l)
    {
        for(int f=d;f<=l;f++)
        {
            int nb,abc,zh=0,qi=0,ling=1233,abcde=0;
            nb=f;
            abc=nb%10;
            nb/=10;
            while(nb>0)
            {
                if(nb%10!=abc)
                {
                    ling=nb%10;
                    break;
                }
                nb/=10;
            }
            int wc=f;
            while(wc>0)
            {
                if(wc%10!=ling and wc%10!=abc)
                {
                    abcde=1;
                }
                if(wc%10==abc)
                {
                    zh++;
                }
                if(wc%10==ling)
                {
                    qi++;
                }
                wc/=10;
            }
            if(abcde==1)
            {
                continue;
            }
            if(zh==1 or qi==1)
            {
                count=count+1;
            }
            
        }
        cout<<count;
    }
}

10个测试点,对了6个


#include <stdio.h>
#include <string.h>

int main()
{
    int l, r, i, j, k, len, count = 0;
    scanf("%d %d", &l, &r);

    for (i = l; i <= r; i++)
    {
        int a[20] = {0};
        int num = i;
        len = 0;
        while (num > 0)
        {
            a[len++] = num % 10;
            num /= 10;
        }

        // 判断是否优雅
        int flag = 1;
        for (j = 0; j < len - 1; j++)
        {
            if (a[j] != a[j + 1])
            {
                flag = 0;
                break;
            }
        }
        if (flag == 1)
        {
            count++;
        }
    }
    printf("%d", count);
    return 0;
}