輪盤直徑 D₀=89,布厚度 h=0.5 → 每圈直徑增加 1。
每次布前進 L=320,印花。輸入 N,輸出第 N 次停車時輪盤轉動總角度(度)。
n 圈外徑:D_n = 89 + n (n 從 0 開始)n 圈周長:C_n = π × D_nn 圈布長總和:S_n = Σ_{i=0}^{n-1} π(89+i) = π(89n + n(n-1)/2)L_total = N × 320n 使 S_n ≤ L_total:89n + n(n-1)/2 ≤ L_total/πn = floor( (√(177² + 8L_total/π) - 177) / 2 )rem = L_total - S_nn+1 圈半徑:r = (89 + n) / 2θ_rem = rem / rθ_total = n × 2π + θ_rem → 轉度數 × 180/π
#include
#include
#define PI 3.14159265358979323846
double calculateAngle(int N) {
double L_total = N * 320.0;
// 求完整圈數 n
double discriminant = 177.0 * 177.0 + 8.0 * L_total / PI;
int n = (int)floor((sqrt(discriminant) - 177.0) / 2.0);
// 前 n 圈布長
double S_n = PI * (89.0 * n + n * (n - 1) / 2.0);
double rem = L_total - S_n;
// 第 n+1 圈半徑
double r = (89.0 + n) / 2.0;
double theta_rem = rem / r; // 弧度
double total_rad = n * 2.0 * PI + theta_rem;
return total_rad * 180.0 / PI; // 轉度
}
int main() {
int N;
printf("輸入 N: ");
scanf("%d", &N);
printf("第 %d 次轉動角度: %.2f 度\n", N, calculateAngle(N));
return 0;
}
| N | 總布長 | 完整圈數 | 角度(度) |
|---|---|---|---|
| 1 | 320 | 0 | ≈ 412.3° |
| 2 | 640 | 1 | ≈ 720+?° |