• CCNUOJ 1010 The Almost Lucky Numbers


    1010: The Almost Lucky Numbers

    Time Limit: 1 Sec  Memory Limit: 128 MB
    Submit: 16  Solved: 11
    [Submit][Status][Web Board]

    Description

    John and Brus believe that the digits 4 and 7 are lucky and all others are not. According to them, an almost lucky number is a number that contains at most one non-lucky digit in its decimal representation. Return the total number of almost lucky numbers between a and b, inclusive.

    Input

    Each line contains two integers a,b<=1,000,000

    Output

    For each line of input,output the total number of almost lucky numbers between a and b, inclusive.

    Sample Input

    4 7 8 19

    Sample Output

    4 4

    思路:数据不大,直接搜即可。或者另一种方法,排列组合,不成熟,当搜索的数和当前数位数相同的时候没想出来怎么算
    #include<stdio.h>
    int l(int x)
    {
    	int cnt(0);
    	while(x>0) {x/=10;cnt++;}
    	return cnt;
    }
    bool is(int x)
    {
    	bool y(true);
    	while(x>0)
    	{
    		if(!(x%10==4||x%10==7)) 
    		{if(y) y=!y;else return false;}
    		x/=10;
    	}
    	return true;
    }
    int main()
    {
    	int x,y,t,i,a,lx,ly;
    	int e[9],u[9];
    	e[0]=1;u[0]=1;e[1]=1;
    	for(i=1;i<9;i++)
    	{
    		u[i]=u[i-1]*2;
    	}
    	for(i=2;i<9;i++)
    	{
    		e[i]=e[i-1]*10;
    	}
    	while(scanf("%d%d",&x,&y)==2)
    	{
    		a=0;
    		if(x>y) {t=x;x=y;y=t;}
    		lx=l(x);ly=l(y);
    		if(ly-lx>=2)
    		{
    			for(i=lx+1;i<=ly-1;i++)
    			{
    				a+=u[i]+8*u[i-1]*i-u[i-1];
    			}
    			for(i=x;i<e[lx+1];i++)
    			{
    				if(is(i)) a++;
    			}
    			for(i=e[ly];i<=y;i++)
    			{
    				if(is(i)) a++;
    			}
    		}
    		else
    		{
    			for(i=x;i<=y;i++)
    			{
    				if(is(i)) a++;
    			}
    		}
    		printf("%d\n",a);
    	}
    	return 0;
    }
    

      


  • 相关阅读:
    训练网络考虑内容
    阿斯顿
    wifi 模块Yeelink联网
    fpga串口通信的verilog驱动
    vga显示彩条
    状态机之二段式
    矩阵键盘
    error
    时钟
    Error(10028)
  • 原文地址:https://www.cnblogs.com/laputa/p/2127035.html
Copyright © 2020-2023  润新知