题目1:U型数字
题概:所谓U型数字,就是这个数字的每一位先严格单调递减,后严格单调递增。比如 212 就是一个U型数字,但是 333, 98, 567 31313,就是不是U型数字。请问[1,100000] 有多少U型数字?
直接暴力枚举
#include<cstdio>
using namespace std;
int main(){
for(int i=100;i<100000;i++){
//对每个i的长度都需要一次判断,比较麻烦
}
return 0;
}
分类暴力枚举
#include<cstdio>
using namespace std;
int main(){
int count=0;
for(int i=100;i<1000;i++){
int a=i/100;
int b=(i-a*100)/10;
int c=i%10;
if(a>b&&b<c){
count++;
}
}
for(int i=1000;i<10000;i++){
int a=i/1000;
int b=(i-a*1000)/100;
int c=(i-a*1000-b*100)/10;
int d=i%10;
if((a>b&&b>c&&c<d)||(a>b&&b<c&&c<d)){
count++;
}
}
for(int i=10000;i<100000;i++){
int a=i/10000;
int b=(i-a*10000)/1000;
int c=(i-a*10000-b*1000)/100;
int d=(i-a*10000-b*1000-c*100)/10;//优化:int d=i/10%10;
int e=i%10;
if((a>b&&b>c&&c>d&&d<e)||(a>b&&b>c&&c<d&&d<e)||(a>b&&b<c&&c<d&&d<e)){
count++;
}
}
printf("%d",count);
return 0;
}