逆向思考。 但是最后路程会多出来,必须减去多出来的那部分。 #include <stdio.h> int main() { int n,k; double dist; double orl; int i,j; while (scanf("%d", &k) != EOF) { for (j=0;j<k;j++) { scanf("%d", &n); dist = n-500; i=1; orl = 500.0; while (dist>0) { dist -= 500.0/(i*2+1); i++; //printf("%f %d/n", dist, i-1); } orl = 500*i+dist*(i*2-1); printf("%.3f/n", orl); } } return 0; }