计蒜客 2018蓝桥杯省赛 B组模拟赛(一) C题 U型数字(java)

U型数字

        最近蒜头君喜欢上了U型数字,所谓U型数字,就是这个数字的每一位先严格单调递减,后严格单调递增。比如 212 就是一个U型数字,但是 333, 98, 567, 31313,就不是U型数字。
        现在蒜头君问你,[1,100000]有多少U型数字?

        提示:请不要输出多余的符号。



结果:

8193



思路:

    因为在100以内的数字每一位,只能是单调递增或者单调递减,所以100以内的数字不用考虑了,可以节省点时间。

    U型:就是这个数字的每一位先严格单调递减,后严格单调递增,简单的说就是去任意一个点,左边的点比这个点大,右边的点也比这个点大。

    而且还要注意一点,如果相邻的两位数相等时,则不具有单调性(单调递增或递减)。



代码如下:

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		int[] arr = new int[6];
		int cnt=0;
		for(int i=101;i<100000;i++){//100之内只能单调递增或者单调递减
			int t=i;
			int flag=0;
			while(t!=0){//取数字的每一位
				arr[flag]=t%10;
				t/=10;
				flag++;
			}
			flag--;//实际只有flag-1个 ,因为上面的代码最后++了
			int s=0;//用来标记
			for(int j=1;j<flag;j++){//判断先递减后递增
				if(arr[j]-arr[j-1]<0 && arr[j+1]-arr[j]>0){//先递减后递增
					s++;
				}
				if(arr[j]-arr[j-1]>0 && arr[j+1]-arr[j]<0){//先递增后递减
					break;
				}
				if(arr[j]==arr[j-1]){//如果相邻的两个数相等,则不满足单调性
					break;
				}
				if(j==flag-1){//判断最后一对
					if(arr[j+1]==arr[j]){
						break;
					}
				}
				if(s>1){//有两个或以上的先递减后递增
					break;
				}
				if(j==flag-1 && s==1){
					cnt++;
				}
			}
		}
		System.out.println(cnt);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值