计算机考研机试备考(王道)
第二章 暴力求解
1.枚举策略
常见复杂度对应数据量表
![数据结构考研学习笔记_第1张图片](http://img.e-com-net.com/image/info8/39490d2b60de4b3ea1a853bb64e3b0ad.jpg)
例题2.1 abc
![数据结构考研学习笔记_第2张图片](http://img.e-com-net.com/image/info8/551878384fe24349af83e8d7c504ceeb.jpg)
#include
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++)
{
if ((a * 100 + b * 10 + c + b * 100 + c * 10 + c) == 532)
cout << a << " " << b << " " << c << endl;
}
return 0;
}
例题2.2 反序数
![数据结构考研学习笔记_第3张图片](http://img.e-com-net.com/image/info8/4cc91c1c7ba047cfad4443b88f3fc899.jpg)
#include
using namespace std;
int reverse(int number)
{
int reversenumber = 0;
while (number != 0)
{
reversenumber *= 10;
reversenumber += number % 10;
number /= 10;
}
return reversenumber;
}
int main()
{
for (int i = 1000; i < 9999; i++)
if (i * 9 == reverse(i)) {
cout << i << endl;
}
return 0;
}
例题2.3 对称平方数
![数据结构考研学习笔记_第4张图片](http://img.e-com-net.com/image/info8/ae0338801775451baca77ce724aaf984.jpg)
#include
using namespace std;
int Reverse(int number) {
int reverseNumber = 0;
while (number != 0) {
reverseNumber *= 10;
reverseNumber += number % 10;
number /= 10;
}
return reverseNumber;
}
int main() {
for (int i = 1; i < 256; i++) {
if (i * i == Reverse(i * i)) {
cout << i << endl;
}
}
return 0;
}
2.图形排版
例题2.4 输出梯形
![数据结构考研学习笔记_第5张图片](http://img.e-com-net.com/image/info8/c32176e2e0ea408fa08fb266830f3f97.jpg)
#include
using namespace std;
int main()
{
int h;
while (cin >> h)
{
int row = h;
int col = h + 2 * (h - 1);
for (int i = 0; i < row; ++i)
{
for (int j = 0; j < col; ++j)
{
if (j < (col - (h + 2 * i)))
{
cout << " ";
}
else
{
cout << "*";
}
}
cout << endl;
}
}
return 0;
}
3.日期问题
例题2.5 今年的第几天
![数据结构考研学习笔记_第6张图片](http://img.e-com-net.com/image/info8/aa254517df2f4e66b01cb36912b6ef0e.jpg)
#include
using namespace std;
int dayTable[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}
};
bool IsLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
int main() {
int Y, M, D;
while (cin >> Y >> M >> D) {
int number = 0;
int row = IsLeapYear(Y);
for (int j = 0; j < M; j++) {
number += dayTable[row][j];
}
number += D;
cout << number << endl;
}
return 0;
}
例题2.6 打印日期
![数据结构考研学习笔记_第7张图片](http://img.e-com-net.com/image/info8/0649a67e1684460fb21db143ab58f066.jpg)
#include
using namespace std;
int dayTable[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}
};
bool IsLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
int main() {
int Y, M, D;
int number = 0;
while (cin >> Y >> number) {
M = 0;
int row = IsLeapYear(Y);
while (number > dayTable[row][M]) {
number -= dayTable[row][M];
M++;
}
D = number;
printf("%04d-%02d-%02d\n", Y, M, D);
}
return 0;
}
4.其他模拟
例题2.7 手机键盘
![数据结构考研学习笔记_第8张图片](http://img.e-com-net.com/image/info8/dddc933136f84de8b78079b8144c393b.jpg)