暴力求解问题时,首先对问题规模进行判断,符合题目要求才能使用
1.枚举
1.1求反序数
求一个数的反序数,eg:1234的反序数是4321
int Reverse(int x)
{
int revx=0;
while(x!=0)
{
revx *= 10;//不断对revx进行乘运算
revx += x % 10;
x /= 10;//不断对x进行除运算
}
return revx;
}
延申:可用于判断对称数
if(x == Reverse(x))
return true;//是对称数
针对字符串,向量的反序,可使用algorithm头文件下的reverse函数
#include <algorithm>
string str="abcdef";
reverse(str.begin(),str.end());//全部反序,得到"fedcba"
reverse(str.begin(),str.begin()+3);//针对部分的反序,得到"cbadef"
vector<int> v={1,2,3,4,5};
reverse(v.begin(),v.end());//全部反序
2.模拟
2.1图形排版
2.2日期问题
数据预处理:使用二维数组,以时间换空间
int daytab[2][13]={
{0,31,28,31,30,31,30,31,31,30,31,30,31},
{0,31,29,31,30,31,30,31,31,30,31,30,31}
};
判断闰年:年数不能被100整除,但能被4或400整除(闰年返回1,平年返回0)
bool isLeapYear(int year)//返回值作为上述二维数组的行下标
{
return (year % 4 == 0 && year % 100 !=0) || (year % 400 == 0);
}
2.2.1给年月日,求是本年第几天
设置变量记录本年总天数,并逐月添加天数:year用于判断闰年,month和day获得总天数
2.2.2给本年的第n天,求年月日
使用while循环,剩余天数大于月份则month增加;剩余天数小于月份,则获得day