【c语言】蓝桥杯2020校内模拟赛c组

一个正整数如果任何一个数位不大于右边相邻的数位,则称为一个数位递增的数,例如1135是一个数位递增的数,而1024不是一个数位递增的数。给定正整数 n,请问在整数 1 至 n 中有多少个数位递增的数?

#include
int main()
{
	long int n,i,count=0;//定义要输入的n,用来遍历的i,用来计数的count 
	long int a,b,c,d,e,f;// 根据n的评测范围,定义6个长整型变量 
	printf("input i: ");
	scanf("%ld",&n);
	//当时想到的就是把他以不同位数拆分,对每一部分进行分别求解 
	for(i=1;i<=n;i++)
	{
		if(i<10)//1到9肯定都符合,但不能因此省略,否侧测试数据小于9就出错了 
		{
			continue;
		}
		if(i>=10&&i<100)//2位数 
		{
			a=i/10;//十位 
			b=i%10;//个位 
			if(a<=b)//判断递增 
			{
				count++;//如果满足,则总数加1 
				continue;//该数符合条件后则返回进行下一个数的判断 
			}
		}
		if(i>=100&&i<1000)//3位数,以下思路同上 
		{
			a=i/100;
			b=i/10%10;
			c=i%10;
			if(a<=b&&b<=c)
			{
				count++;
				continue;
			}
		}
		if(i>=1000&&i<10000)//4位数 
		{
			a=i/1000;
			b=i/100%10;
			c=i/10%10;
			d=i%10;
			if(a<=b&&b<=c&&c<=d)
			{
				count++;
				continue;
			}
		}
		if(i>=10000&&i<100000)//5位数 
		{
			a=i/10000;
			b=i/1000%10;
			c=i/100%10;
			d=i/10%10;
			e=i%10;
			if(a<=b&&b<=c&&c<=d&&d<=e)
			{
				count++;
				continue;
			}
		}
		if(i>=100000&&i<1000000)//6位数 
		{
			a=i/100000;
			b=i/10000%10;
			c=i/1000%10;
			d=i/100%10;
			e=i/10%10;
			f=i%10;
			if(a<=b&&b<=c&&c<=d&&d<=e)
			{
				count++;
				continue;
			}
		}
	}
	printf("%ld",count);//输出总数 
	return 0;	
}

【c语言】蓝桥杯2020校内模拟赛c组_第1张图片
【c语言】蓝桥杯2020校内模拟赛c组_第2张图片
【c语言】蓝桥杯2020校内模拟赛c组_第3张图片
【c语言】蓝桥杯2020校内模拟赛c组_第4张图片
【c语言】蓝桥杯2020校内模拟赛c组_第5张图片
参考
https://blog.csdn.net/qq_45556278/article/details/104976266

你可能感兴趣的:(#,蓝桥杯)