题目来源:码蹄集
题目描述:
Python代码实现:
def gcd(x, y):
if x < y:
x, y = y, x
if x % y == 0:
return y
return gcd(y, x % y)
n = int(input())
a = [[0] * 200 for _ in range(50)]
a[1][1] = 1
a[1][2] = 1
a[1][3] = 1
a[1][4] = 1
for i in range(1, n+1):
for j in range(1, 200):
for k in range(1, 5):
if j > k:
a[i][j] += a[i - 1][j - k]
x, y = 0, 0
for i in range(n, 200):
if i < 2 * n:
x += a[n][i]
if i - 2 * n > n:
y += a[n][i]
Max = 1
for i in range(1, n+1):
Max *= 4
x_gcd = gcd(x, Max)
y_gcd = gcd(y, Max)
print(str(x // x_gcd) + "/" + str(Max // x_gcd))
print(str(y // y_gcd) + "/" + str(Max // y_gcd))
C++代码实现:
参考链接:https://blog.csdn.net/m0_54754302/article/details/128209412
#include<bits/stdc++.h>
using namespace std;
long long a[50][200];
long long gcd(long long x, long long y) {
if (x < y) {
long long t = x;
x = y;
y = t;
}
if (x % y == 0)
return y;
return gcd(y, x % y);
}
int main() {
int n;
cin >> n;
a[1][1] = 1;
a[1][2] = 1;
a[1][3] = 1;
a[1][4] = 1;
for (int i = 1; i <= n; i++) {
for (int j = 1; j < 200; j++) {
for (int k = 1; k <= 4; k++) {
if (j > k) {
a[i][j] += a[i - 1][j - k];
}
}
}
}
long long x = 0, y = 0;
for (int i = n; i < 200; i++) {
if (i < 2 * n)
x += a[n][i];
if (i - 2 * n > n)
y += a[n][i];
}
long long Max = 1;
for (int i = 1; i <= n; i++) {
Max *= 4;
}
int x_gcd = gcd(x, Max);
int y_gcd = gcd(y, Max);
cout << x / x_gcd << "/" << Max / x_gcd << endl;
cout << y / y_gcd << "/" << Max / y_gcd << endl;
return 0;
}
Java代码实现:
import java.util.Scanner;
public class Main {
public static long gcd(long x, long y) {
if (x < y) {
long t = x;
x = y;
y = t;
}
if (x % y == 0)
return y;
return gcd(y, x % y);
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n = input.nextInt();
long[][] a = new long[50][200];
a[1][1] = 1;
a[1][2] = 1;
a[1][3] = 1;
a[1][4] = 1;
for (int i = 1; i <= n; i++) {
for (int j = 1; j < 200; j++) {
for (int k = 1; k <= 4; k++) {
if (j > k) {
a[i][j] += a[i - 1][j - k];
}
}
}
}
long x = 0, y = 0;
for (int i = n; i < 200; i++) {
if (i < 2 * n)
x += a[n][i];
if (i - 2 * n > n)
y += a[n][i];
}
long Max = 1;
for (int i = 1; i <= n; i++) {
Max *= 4;
}
long x_gcd = gcd(x, Max);
long y_gcd = gcd(y, Max);
System.out.println(x / x_gcd + "/" + Max / x_gcd);
System.out.println(y / y_gcd + "/" + Max / y_gcd);
input.close();
}
}
代码提交测试结果:
附B站老师讲解链接,可供参考:https://www.bilibili.com/video/BV1ck4y1s7s8/?t=169.5