FOJ 2071 lucky number

定义了lucky number.

就是一个数的任意从左到右选三个数字a,b,c。

若a<b<c或者a>b>c或者a,b,c三者中存在相同数字,则不是lucky number。

可以证明大于9999的数中不存在lucky number.

然后就是暴力判断1~9999的每个数是不是lucky number.(写的比较挫。)

数组cnt[]存放,1~N的lucky number的总个数.

#include <iostream>
using namespace std;

int cnt[10100];

int fun(int x)
{
	if(x>=10000)
		return cnt[9999];
	else
		return cnt[x];
}

int main()
{
	int t,l,r,i,a,b,c,d,num;
	scanf("%d",&t);
	cnt[0] = 0;
	for(i=1;i<=10;i++)
	{
		cnt[i] = cnt[i-1] + 1;
	}
	for(i=11;i<=99;i++)
	{
		a = i/10;
		b = i%10;
		if(a==b)
			cnt[i] = cnt[i-1];
		else
			cnt[i] = cnt[i-1] + 1;
	}
	for(i=100;i<=999;i++)
	{
		num = i;
		a = i%10;
		i /= 10;
		b = i%10;
		c = i/10;
		i = num;
		if(a==b||a==c||b==c||(a<b&&b<c)||(a>b&&b>c))
			cnt[i] = cnt[i-1];
		else
			cnt[i] = cnt[i-1] + 1;
	}
	for(i=1000;i<=9999;i++)
	{
		num = i;
		a = i%10;
		i /= 10;
		b = i%10;
		i /= 10;
		c = i%10;
		d = i/10;
		i = num;
		if(a==b||a==c||a==d||b==c||b==d||c==d)
			cnt[i] = cnt[i-1];
		else if((a<b&&b<c)||(a<b&&b<d)||(a<c&&c<d)||(b<c&&c<d))
			cnt[i] = cnt[i-1];
		else if((a>b&&b>c)||(a>b&&b>d)||(a>c&&c>d)||(b>c&&c>d))
			cnt[i] = cnt[i-1];
		else
			cnt[i] = cnt[i-1] + 1;
	}
	while(t--)
	{
		scanf("%d %d",&l,&r);
		printf("%d\n",fun(r)-fun(l-1));
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值