百鸡问题 / 优化解

  • 通过直接枚举 (i, j, k) 方案数 + 判定的方式解决
  • 注意下取整的细节 k/z
#include <bits/stdc++.h>
using namespace std;

int main() {
    int x, y, z, n, m;
    cin >> x >> y >> z >> n >> m;

    // 方案组成 (i, j, k) 分别表示公鸡、母鸡、小鸡的数量
    int cnt = 0;
    for (int i = 0; i <= m; i++) {
        for (int j = 0; j <= m - i; j++) {
            int k = m - i - j;
            if (k % z == 0 && i * x + j * y + k / z == n) {
                ++cnt;
            }
        }
    }
    cout << cnt << endl;
    return 0;
}

勾股数问题

  • 掌握判断完全平方数的方法
    • 开方后的平方依然相等自身
int cc = a * a + b * b;
int c = sqrt(cc); // 如果不是整数会向下取整数
if (c * c == cc) {
  cout << "Yes" << endl;  
}
#include <bits/stdc++.h>
using namespace std;
int main() {
	int n, cnt = 0;
	cin >> n;
	for (int a = 1; a <= n; a++) {
		for (int b = a; b <= n; b++) {
			int c = sqrt(a*a+b*b);
            int cc = a * a + b * b;
			if (c * c == cc && cc <= n * n) {
				cnt++;
				// cout << a*a << " " << b*b << " " << cc << endl;
			}
		}
	}
	cout << cnt;
	return 0;
}