河岸柳 发表于 2021-9-18 01:51:29

新手求助

输出结果错误,不知道问题出在哪里?
输入: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位小数。

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

int main()
{
        int m, n,i;
        double sum=0;
       
        scanf("%d",&m);
        while(m--)
        {
                scanf("%d",&n);
                for(i=1;i<=n;i++)
          {
                  if(i%2!=0)
                     {sum=sum+1.00/n;}
                  else
                     {sum=sum-1.00/n;}
               
                printf("%.2f\n",&sum);
                printf(" ");
          }
        }
       
        return 0;
}

傻眼貓咪 发表于 2021-9-18 01:51:30

本帖最后由 傻眼貓咪 于 2021-9-18 20:49 编辑

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


int main(){
    int a = 1, b = 2;
    printf("%d", a/b);
    return 0;
}0
你的题目可以参考我的代码
C 语言
#include<stdio.h>

float polynomial(float n){
    float res = 0;
    for(int i=1; i<=n; i++){
      if(i%2){
            res += 1/(float)i;
      }
      else{
            res -= 1/(float)i;
      }
    }
    return res;
}

int main()
{
    int m;
    float n;
    scanf("%d", &m);
    for(int i=0; i<m; i++){
      scanf("%f", &n);
      printf("%.2f ", polynomial(n));
    }
    return 0;
}Python 语言def polynomial(n: int) -> float:
    res = 0
    for n, i in enumerate(range(1, n+1)):
      if not n%2:
            res += (1/i)
      else:
            res -= (1/i)
    return round(res, 2)

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

for i in n:
    print(f"{polynomial(i):.2f}", end = " ")结果输出:2
1 2
1.00 0.50

大马强 发表于 2021-9-18 06:45:10

printf("%.2f\n",&sum); 这里写错了

#include<stdio.h>

int main()
{
      int m, n,i;
      double sum=0;
      
      scanf("%d",&m);
      while(m--)
      {
                scanf("%d",&n);
                for(i=1;i<=n;i++)
            {
                  if(i%2!=0)
                     {sum=sum+1.00/n;}
                  else
                     {sum=sum-1.00/n;}
               
                printf("%.2f\n",sum);
                printf(" ");
            }
      }
      
      return 0;
}

河岸柳 发表于 2021-9-18 10:52:04

大马强 发表于 2021-9-18 06:45
printf("%.2f\n",&sum); 这里写错了

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

int main()
{
        int i;
        double sum=0, m, n;
       
        scanf("%lf",&m);
        while(m--)
        {
                scanf("%lf",&n);
                for(i=1;i<=n;i++)
          {
                  if(i%2!=0)
                     {sum=sum+1/n;}
                  else
                     {sum=sum-1/n;}
                }
                printf("%.2lf",sum);
                printf(" ");
                sum=0;
        }
       
        return 0;
}

大马强 发表于 2021-9-18 17:07:54

河岸柳 发表于 2021-9-18 10:52
还是不行呀,输出是1.00和0.00
我把代码稍微改了一下

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

int main()
{
      int i,m,n;
      double sum=0;
      
      scanf("%d",&m);
      while(m--)
      {
            scanf("%d",&n);
            if (n%2!=0)
                    sum+=1/(float)n;
            else
                    sum-=1/(float)n;
      }
      printf("%.2lf",sum);
      
      return 0;
}

河岸柳 发表于 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这个结果

大马强 发表于 2021-9-18 23:49:02

你用 for循环的话
比如你输入 2 1 2
这样你while循环两次,for循环3次
第一次 while循环 0 + 1
第二次while循环 0+1; 1-1
看不出for'循环能实现你的多项式计算
页: [1]
查看完整版本: 新手求助