上百道面试编程题,助力你秒杀面试(附在线测试链接和题解,不定期更新,待续)

第二章 暴力求解

2.1 枚举

习题 2.1 与7无关的数

#include <iostream>
#include <cstdio>

using namespace std;

bool judge(int x) {
	bool flag1 = false;
	bool flag2 = false;
	int a;
	if (x % 7 == 0) {
		flag1 = true;
	}
	while (x != 0) {
		a = x % 10;
		if (a == 7) {
			flag2 = true;
		}
		x /= 10;
	}
	return flag1 || flag2;
}
int main() {
	int sum = 0;
	for (int i = 1; i < 100; ++i) {
		if (judge(i) == false) {
			sum += i * i;
		}
	}
	printf("%d", sum);
	return 0;
}

习题2.2 百鸡问题-哈工大上机

Tips1:在Visual Studio中,scanf被认为是不安全的,需要用scanf_s代替。但是在在线提交编译的时候,还是得用scanf。

 

F&Q2:考虑到z/3之后,Z变为整数,必然是≤(double)z/3,这将有可能引起式子的判断失误,因为 / 是保留整数而舍去小数位的。故应该将z/3进行强制转换,但是仅仅转换z是不够的的,会因为整个式子,只有z是double型而其他数(x,y)都是整型引起错误,所以应该将三个数都强制转换。
#include<iostream>
#include<cstdio>

using namespace std;

int main() {
	int n;
	int solution_count = 0;
	while (scanf_s("%d", &n) != EOF) {
		for (int x = 0; x <= 100; ++x) {
			for (int y = 0; y <= 100; ++y) {
				for (int z = 0; z <= 100; ++z) {
					if ((x + y + z) == 100 && ((double)x * 5 + (double)y * 3 + (double)z / 3) <= (double)n) {
						solution_count += 1;
						printf("x=%d,y=%d,z=%d\n", x, y, z);
					}
				}
			}
		}
		if (solution_count == 0)
			printf("No solution!");
	}
	return 0;
}

习题2.3 Old Bill-上交大机试

Tips1:由于最贵价格是需要最后输出的(循环结束之后),但因此万位数和个位数也只能在循环结束之后输出,因此需要加一个flag用来标记最终的符合最贵价格的万位数和个位数。
Tips2:最贵价格可以先定义一个初值,之后每遇到一个比其大的价格,就被替换掉,最终取得最贵价格。
Tips3:依照题目要求,火鸡的价格必须是整数,所以替换最贵价格的操作和对应的万位数、个位数的操作应该在判断伙计的价格是否是整数的条件语句大括号内
Tips4:整个程序应当有一定的容错性,当所有的万位数和个位数组合无法除尽火鸡个数时,此时应当是无解,这也是正好是flag标记存在的意义。
#include<iostream>
#include<iostream>

using namespace std;

int main() {
	int N;
	int X;
	int Y;
	int Z;
	int maxPrice = 0;
	while (scanf_s("%d%d%d%d", &N, &X, &Y, &Z) != EOF) {
		int i;	//定义万位
		int j;	//定义个位
		int flag1=0;
		int flag2=0;
		//遍历所有可能的总价格
		for (i = 1; i <= 9; i++) {
			for (j = 0; j <= 9; j++) {
				int Remainder = (i * 10000 + X * 1000 + Y * 100 + Z * 10 + j) % N;
				int result= (i * 10000 + X * 1000 + Y * 100 + Z * 10 + j) / N;
				if (Remainder % N == 0) {
					if (result > maxPrice) {
						maxPrice = result;
						flag1 = i;
						flag2 = j;
					}
				}
			}
		}
		if (flag1 == 0) {
			printf("0");
		}
		else {
			printf("%d %d %d\n", flag1, flag2, maxPrice);
		}
	}
	return 0;

2.2 模拟

例题 2.4 梯形星号组的输出-清华机试

#include <iostream>
#include <cstdio>

using namespace std;

int main() {
	int h;	//定义要输出的行数
	//到需要输出的梯形星号组还没有全部输出完,循环执行输出单个梯形星号组。
	//例如:输入了“4 5”,表示要分别输出有4行星号的梯形星号组和有5行星号的梯形星号组
	while (scanf_s("%d", &h) != EOF) {
		int row = h;	//row为需要输出的行数
		int col = h + (h - 1) * 2;	//col为最下面一行需要输出的星号数量
		for (int i = 0; i < row; ++i) {
			for (int j = 0; j < col; ++j) {
				if (j < (4 - i) * 2) {
					printf(" ");	//先输出每一行的空格
				}
				else {
					printf("*");	//再输出每一行的星号
				}
			}
			printf("\n");	//一组梯形星号输出完毕后回车,以便和下一组梯形星号区分开
		}
	}
	return 0;
}

例题 2.5 叠筐

 
 





posted @ 2021-02-09 00:42  柒柒星球  阅读(113)  评论(0编辑  收藏  举报