本题要求编写程序,计算N个有理数的平均值。

输入格式:

输入第一行给出正整数N(≤100);第二行中按照a1/b1 a2/b2 …的格式给出N个分数形式的有理数,其中分子和分母全是整形范围内的整数;如果是负数,则负号一定出现在最前面。

输出格式:

在一行中按照a/b的格式输出N个有理数的平均值。注意必须是该有理数的最简分数形式,若分母为1,则只输出分子。

输入样例1:

  1. 4
  2. 1/2 1/6 3/6 -5/10

输出样例1:

  1. 1/6

输入样例2:

  1. 2
  2. 4/3 2/3

输出样例2:

  1. 1
  1. #include<stdio.h>
  2. int main(){
  3. int n;
  4. scanf("%d", &n);
  5. int a1, b1, a2, b2;
  6. int x, y;
  7. int i, j;
  8. int flag = 0;
  9. a1 = 0;
  10. b1 = 1;
  11. for(i=0; i<n; i++){//利用循环,将【当前分数】之前的分数和算成a1/b1
  12. scanf("%d/%d", &a2, &b2);
  13. if(a2==0){
  14. continue;
  15. }
  16. else{
  17. x = a1*b2 + a2*b1;
  18. y = b1*b2;
  19. if(x<0){
  20. x = -x;
  21. flag = 1;
  22. }
  23. for(j=x; j>1; j--){
  24. if(x%j==0 && y%j==0){
  25. x = x / j;
  26. y = y / j;
  27. break;
  28. }
  29. }
  30. if(flag){
  31. x = -x;
  32. flag = 0;
  33. }
  34. //printf("x=%d,y=%d\n", x, y);
  35. a1 = x;
  36. b1 = y;
  37. }
  38. }
  39. y = y * n;//计算平均值
  40. if(x<0){
  41. x = -x;
  42. flag = 1;
  43. }
  44. for(j=x; j>1; j--){
  45. if(x%j==0 && y%j==0){
  46. x = x / j;
  47. y = y / j;
  48. break;
  49. }
  50. }
  51. if(flag){
  52. x = -x;
  53. flag = 0;
  54. }
  55. if(x==0)
  56. printf("%d", x);
  57. else if(y==1)
  58. printf("%d", x);
  59. else
  60. printf("%d/%d", x, y);
  61. return 0;
  62. }