鱼C论坛

 找回密码
 立即注册
查看: 1297|回复: 5

[已解决]救急!!!

[复制链接]
发表于 2019-12-1 10:40:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请帮我看一下,需要尽快谢谢
最佳答案
2019-12-1 21:51:31
本帖最后由 superbe 于 2019-12-1 22:35 编辑
  1. #include <stdio.h>
  2. #include <math.h>
  3. #define N 30
  4. #define e 2.71828

  5. int main(void)
  6. {
  7.     int nums[N], freq[20] = {0};
  8.     int i, maxf = 0, sum = 0;
  9.     double mu, g, result = 0;

  10.     printf("输入%d个1-100之间的整数:\n", N);
  11.     for (i = 0; i < N; i++) {      //输入整数
  12.         scanf("%d", &nums[i]);
  13.         sum += nums[i];
  14.         freq[(nums[i] - 1) / 5]++; //频次加1
  15.     }
  16.     mu = (double)sum / N;          //平均值
  17.     for (i = 0; i < 20; i++) {      //最大频次
  18.         if (freq[i] > maxf)
  19.             maxf = freq[i];
  20.     }
  21.     for (i = 0; i < 20; i++) {      //求s
  22.         g = maxf * pow(e, -pow((i + 1) * 5 - mu, 2));
  23.         result += pow(freq[i] - g, 2);
  24.     }
  25.     printf("result = %f\n", result);

  26.     return 0;
  27. }
复制代码

-----------------------------------------------------------------------------------
输入30个1-100之间的整数:
23 19 90 43 12 87 45 94 38 44
34 65 76 99 100 28 33 50 43 68
22 34 87 62 71 60 51 77 99 39
result = 67.237480
请按任意键继续. . .
微信图片_20191201010740.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-1 21:51:31 | 显示全部楼层    本楼为最佳答案   
本帖最后由 superbe 于 2019-12-1 22:35 编辑
  1. #include <stdio.h>
  2. #include <math.h>
  3. #define N 30
  4. #define e 2.71828

  5. int main(void)
  6. {
  7.     int nums[N], freq[20] = {0};
  8.     int i, maxf = 0, sum = 0;
  9.     double mu, g, result = 0;

  10.     printf("输入%d个1-100之间的整数:\n", N);
  11.     for (i = 0; i < N; i++) {      //输入整数
  12.         scanf("%d", &nums[i]);
  13.         sum += nums[i];
  14.         freq[(nums[i] - 1) / 5]++; //频次加1
  15.     }
  16.     mu = (double)sum / N;          //平均值
  17.     for (i = 0; i < 20; i++) {      //最大频次
  18.         if (freq[i] > maxf)
  19.             maxf = freq[i];
  20.     }
  21.     for (i = 0; i < 20; i++) {      //求s
  22.         g = maxf * pow(e, -pow((i + 1) * 5 - mu, 2));
  23.         result += pow(freq[i] - g, 2);
  24.     }
  25.     printf("result = %f\n", result);

  26.     return 0;
  27. }
复制代码

-----------------------------------------------------------------------------------
输入30个1-100之间的整数:
23 19 90 43 12 87 45 94 38 44
34 65 76 99 100 28 33 50 43 68
22 34 87 62 71 60 51 77 99 39
result = 67.237480
请按任意键继续. . .
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-3 00:39:27 | 显示全部楼层
可以 讲解一下吗!?(?_?)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-3 00:42:45 | 显示全部楼层
superbe 发表于 2019-12-1 21:51
-----------------------------------------------------------------------------------
输入30个1-100 ...

我问题没看懂。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-3 02:01:12 | 显示全部楼层
本帖最后由 bin554385863 于 2019-12-3 03:54 编辑


………
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-3 20:56:31 | 显示全部楼层
本帖最后由 superbe 于 2019-12-3 20:58 编辑

把1--100按每5个划分一段:
1--5为第1段,
6--10为第2段,
11-15为第3段,
......
96--100为最后一段,共20段

输入整数时看它落在哪一段就给对应的频次(代表这一段内数的数目)加1。频次数组有20个元素,对应20个段。

然后对20个段每段求出一个s(x)=(f(x)-g(x))2,其中:
x是该段的右边界值,第1段为5,第2段为10,第3段为15......。
f(x)等于该段的频次
g(x)按照题目给的公式计算

最后将所有段的s(x)加起来就是结果。

大致是这样的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-12 11:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表