最近蒜头君喜欢上了U型数字,所谓U型数字,就是这个数字的每一位先严格单调递减,后严格单调递增。比如 212212 就是一个U型数字,但是 333333, 9898, 567567, 3131331313,就是不是U型数字。
现在蒜头君问你,[1,100000][1,100000] 有多少U型数字?
题目链接:点击打开链接
分析:
答案是8193,这题看着很简单,但是只要粗心手误,考虑不周,便会错掉,之所以记录,是给自己一个警示,如果是正真的比赛,恐怕就要错得傻了,第一遍错的是因为判断结果是否加一的时候,没有并上 bj1 和 bj2 都做标记的情况,要细心哇。。
#include<stdio.h>
#include<string.h>
int main()
{
int num=0;
int s[10];
for(int i=100;i<=100000;i++)
{
memset(s,0,sizeof(s));///每轮都要重置
int n=i;
int j=0;
while(n) ///将该数分解存放在数组中
{
s[j++]=n%10;
n/=10;
}
int bj1=0,bj2=0,bj3=0;///用来做标记,方便判断
for(int k=1;k<j;k++)
{
if((s[k]<s[k-1])&&bj2==0)///在没有递增的情况下先递减
bj1=1;
else if(s[k]>s[k-1]&&bj1==1)///在已经递减的情况下递增
bj2=1;
else///一旦有不满足条件的,证明该数不是U型数
bj3=1;
}
if(bj3==0&&bj1==1&&bj2==1)///这里千万要小心,不能写漏,三个条件都符合才是U型数
num++;
}
printf("%d\n",num);
return 0;
}