题目描述:
最近蒜头君喜欢上了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;
}