蓝桥杯 填空 U形数字

题目描述:

最近蒜头君喜欢上了U型数字,所谓U型数字,就是这个数字的每一位先严格单调递减,后严格单调递增。

比如 212 ,84246,5323就是一个U型数字,但是 333, 98, 567, 31313,89,2就不是U型数字。

现在蒜头君问你,[1,100000] 有多少U型数字?

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

分析:

轻敌了,没注意处理边界,答案多了好多。一锤子买卖呀。

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>

using namespace std;

bool judge(int x)
{
    vector<int> t;
    while(x)
    {
        t.push_back(x % 10);
        x /= 10;
    }
    
    int minn = 100, idx;
    for(int i = 0; i < t.size(); ++i)
    {
        if(t[i] < minn)
        {
            minn = t[i];
            idx = i;
        }
    }
    
    // 最小值在两端,直接返回false
    if(idx == 0 || idx == t.size() - 1) return false;
    
    for(int i = idx + 1; i < t.size(); ++i)
        if(t[i] <= t[i-1])  return false;
    
    for(int i = idx - 1; i >= 0; --i)
        if(t[i] <= t[i+1])  return false;
    
    return true;
}

int main()
{
    int cnt = 0;
    for(int i = 1; i <= 100000; ++i)
    {
        if(judge(i))
        {
            //cout<<i<<endl;
            cnt++;
        }
    }

    cout<<cnt<<endl;		// 8193
    
    return 0;
}
发布了811 篇原创文章 · 获赞 127 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/qq_42815188/article/details/104896581