枚举策略
说明:对于考研的试题中,有一些需要使用到暴力求解的问题,如枚举和模拟,枚举就是将所有可能的情况全部列出来
判断题目是否可以使用枚举策略
1、分析数据量
一般情况下,1000ms可以进行10^7的运算,一些题目会限制秒数,一般情况下都是1秒,那么通常情况下都是要用时间复杂度为O(n),所以要学会如何进行分析数据量
题目1:
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
int a,b,c;
for(a=0;a<=9;a++){
for(b=0;b<=9;b++){
for(c=0;c<=9;c++){
int abc = a*100 + b*10 + c;
int bcc = b*100 + c*10 + c;
int temp = abc + bcc;
if(temp == 532){
printf("%d %d %d\n",a,b,c);
}
}
}
}
return 0;
}
题目2:
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
int a,b,c,d,i;
for(i=1000;i<10000;i++){
a = i/1000;
b = i%1000/100;
c = i%100/10;
d = i%10;
int n = d*1000 + c*100 + b*10 + a;
if(i*9 == n){
printf("%d\t",i);
}
}
return 0;
}
题目3
这里添加了反序数的判断,其实第二题也可以使用的,只不过当时没有想到
#include <iostream>
#include <cstdio>
using namespace std;
int Reverse(int number) {
int reverseNumber = 0;
while(number !=0){
reverseNumber *=10;
reverseNumber +=number % 10;
number /=10;
}
return reverseNumber;
}
int main(){
int i;
for(i = 0; i<=256 ; i++){
if(i*i == Reverse(i*i)){
printf("%d\n",i);
}
}
return 0;
}