鱼C论坛

 找回密码
 立即注册
查看: 2790|回复: 6

[已解决]新手求助

[复制链接]
发表于 2021-9-18 01:51:29 | 显示全部楼层 |阅读模式
8鱼币
输出结果错误,不知道问题出在哪里?
输入:2          正确输出:1.00      错误输出:0.00
         1 2                        0.50                     0.00
                                                                 0.00
Problem Description
多项式的描述如下:
1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + ...
现在请你求出该多项式的前n项的和。

Input
输入数据由2行组成,首先是一个正整数m(m<100),表示测试实例的个数,第二行包含m个正整数,对于每一个整数(不妨设为n,n<1000),求该多项式的前n项的和。

Output
对于每个测试实例n,要求输出多项式前n项的和。每个测试实例的输出占一行,结果保留2位小数。

我的代码如下:
  1. #include<stdio.h>

  2. int main()
  3. {
  4.         int m, n,i;
  5.         double sum=0;
  6.        
  7.         scanf("%d",&m);
  8.         while(m--)
  9.         {
  10.                 scanf("%d",&n);
  11.                 for(i=1;i<=n;i++)
  12.             {
  13.                     if(i%2!=0)
  14.                        {sum=sum+1.00/n;}
  15.                     else
  16.                        {sum=sum-1.00/n;}
  17.                
  18.                 printf("%.2f\n",&sum);
  19.                 printf(" ");
  20.             }
  21.         }
  22.        
  23.         return 0;
  24. }
复制代码

最佳答案
2021-9-18 01:51:30
本帖最后由 傻眼貓咪 于 2021-9-18 20:49 编辑

在 C 语言里整型就是整型(integer),浮点就是浮点(float),当整型 1/2 会变成 0,如:
  1. #include<stdio.h>


  2. int main(){
  3.     int a = 1, b = 2;
  4.     printf("%d", a/b);
  5.     return 0;
  6. }
复制代码
  1. 0
复制代码

你的题目可以参考我的代码
C 语言
  1. #include<stdio.h>

  2. float polynomial(float n){
  3.     float res = 0;
  4.     for(int i=1; i<=n; i++){
  5.         if(i%2){
  6.             res += 1/(float)i;
  7.         }
  8.         else{
  9.             res -= 1/(float)i;
  10.         }
  11.     }
  12.     return res;
  13. }

  14. int main()
  15. {
  16.     int m;
  17.     float n;
  18.     scanf("%d", &m);
  19.     for(int i=0; i<m; i++){
  20.         scanf("%f", &n);
  21.         printf("%.2f ", polynomial(n));
  22.     }
  23.     return 0;
  24. }
复制代码
Python 语言
  1. def polynomial(n: int) -> float:
  2.     res = 0
  3.     for n, i in enumerate(range(1, n+1)):
  4.         if not n%2:
  5.             res += (1/i)
  6.         else:
  7.             res -= (1/i)
  8.     return round(res, 2)

  9. m = int(input())
  10. n = list(map(int, input().split()))

  11. for i in n:
  12.     print(f"{polynomial(i):.2f}", end = " ")
复制代码
结果输出:
  1. 2
  2. 1 2
  3. 1.00 0.50
复制代码

最佳答案

查看完整内容

在 C 语言里整型就是整型(integer),浮点就是浮点(float),当整型 1/2 会变成 0,如: 你的题目可以参考我的代码 C 语言 Python 语言结果输出:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-9-18 01:51:30 | 显示全部楼层    本楼为最佳答案   
本帖最后由 傻眼貓咪 于 2021-9-18 20:49 编辑

在 C 语言里整型就是整型(integer),浮点就是浮点(float),当整型 1/2 会变成 0,如:
  1. #include<stdio.h>


  2. int main(){
  3.     int a = 1, b = 2;
  4.     printf("%d", a/b);
  5.     return 0;
  6. }
复制代码
  1. 0
复制代码

你的题目可以参考我的代码
C 语言
  1. #include<stdio.h>

  2. float polynomial(float n){
  3.     float res = 0;
  4.     for(int i=1; i<=n; i++){
  5.         if(i%2){
  6.             res += 1/(float)i;
  7.         }
  8.         else{
  9.             res -= 1/(float)i;
  10.         }
  11.     }
  12.     return res;
  13. }

  14. int main()
  15. {
  16.     int m;
  17.     float n;
  18.     scanf("%d", &m);
  19.     for(int i=0; i<m; i++){
  20.         scanf("%f", &n);
  21.         printf("%.2f ", polynomial(n));
  22.     }
  23.     return 0;
  24. }
复制代码
Python 语言
  1. def polynomial(n: int) -> float:
  2.     res = 0
  3.     for n, i in enumerate(range(1, n+1)):
  4.         if not n%2:
  5.             res += (1/i)
  6.         else:
  7.             res -= (1/i)
  8.     return round(res, 2)

  9. m = int(input())
  10. n = list(map(int, input().split()))

  11. for i in n:
  12.     print(f"{polynomial(i):.2f}", end = " ")
复制代码
结果输出:
  1. 2
  2. 1 2
  3. 1.00 0.50
复制代码

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

使用道具 举报

发表于 2021-9-18 06:45:10 | 显示全部楼层
printf("%.2f\n",&sum); 这里写错了

  1. #include<stdio.h>

  2. int main()
  3. {
  4.         int m, n,i;
  5.         double sum=0;
  6.         
  7.         scanf("%d",&m);
  8.         while(m--)
  9.         {
  10.                 scanf("%d",&n);
  11.                 for(i=1;i<=n;i++)
  12.             {
  13.                     if(i%2!=0)
  14.                        {sum=sum+1.00/n;}
  15.                     else
  16.                        {sum=sum-1.00/n;}
  17.                
  18.                 printf("%.2f\n",sum);
  19.                 printf(" ");
  20.             }
  21.         }
  22.         
  23.         return 0;
  24. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-9-18 10:52:04 | 显示全部楼层
大马强 发表于 2021-9-18 06:45
printf("%.2f\n",&sum); 这里写错了

还是不行呀,输出是1.00和0.00
我把代码稍微改了一下
  1. #include<stdio.h>

  2. int main()
  3. {
  4.         int i;
  5.         double sum=0, m, n;
  6.        
  7.         scanf("%lf",&m);
  8.         while(m--)
  9.         {
  10.                 scanf("%lf",&n);
  11.                 for(i=1;i<=n;i++)
  12.             {
  13.                     if(i%2!=0)
  14.                        {sum=sum+1/n;}
  15.                     else
  16.                        {sum=sum-1/n;}
  17.                 }
  18.                 printf("%.2lf",sum);
  19.                 printf(" ");
  20.                 sum=0;
  21.         }
  22.        
  23.         return 0;
  24. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-9-18 17:07:54 | 显示全部楼层
河岸柳 发表于 2021-9-18 10:52
还是不行呀,输出是1.00和0.00
我把代码稍微改了一下

看了你题目意思
问题有两处
1.为啥用for循环
2.sum在每次循环都变为零了
  1. [code]#include<stdio.h>

  2. int main()
  3. {
  4.         int i,m,n;
  5.         double sum=0;
  6.         
  7.         scanf("%d",&m);
  8.         while(m--)
  9.         {
  10.             scanf("%d",&n);
  11.             if (n%2!=0)
  12.                     sum+=1/(float)n;
  13.             else
  14.                     sum-=1/(float)n;
  15.         }
  16.         printf("%.2lf",sum);
  17.         
  18.         return 0;
  19. }
复制代码
[/code]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-9-18 22:11:01 | 显示全部楼层
大马强 发表于 2021-9-18 17:07
看了你题目意思
问题有两处
1.为啥用for循环

额,这里第二行输入的n=1 n=2是指进行两次运算,一次是sum=1/1,另一次是sum=1/1-1/2,然后输出两个结果1.00和0.50

for循环是为了实现1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + ...,就是为了从1,加或减,到1/n

sum=0,是为了把每一次while循环后的sum值清零,不然就i会变成1.00和1.50了

然后,嗯,大佬,你的这个代码只能输出0.50这个结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-9-18 23:49:02 | 显示全部楼层
你用 for循环的话
比如你输入 2 1 2
这样你while循环两次,for循环3次
第一次 while循环 0 + 1
第二次while循环 0+1; 1-1
看不出for'循环能实现你的多项式计算
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 13:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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