如何在 C++ 中的数组中存储浮点值

how to store float value in the array in C++

提问人:Nitin Priyadarshi 提问时间:3/30/2020 最后编辑:Nitin Priyadarshi 更新时间:3/30/2020 访问量:2398

问:

我得到一个整数值作为我的输出,但我希望它是一个浮点值。我无法找出代码中的问题。 这是代码。

#include <iostream>
#include <vector>
#include <bits/stdc++.h>

using std::vector;
using namespace std;

double get_optimal_value(int n, int capacity, vector<int> weights, vector<int> values) {
  double value = 0.0,p=0.0;
  float max=0.0;
  float m=n,i,k,j,t;
  // write your code here
  vector<double> a(m);
  for(i=0;i<m;i++)
  {
    p=(values[i]/weights[i]);
    a.push_back(p);
  }
  sort(a.begin(), a.end(), greater<double>());

  for(j=0;j<m;j++)
  {
    for(k=0;k<m;k++)
    {
        if(a[j]==values[k]/weights[k])
        {
            if(weights[k]<=capacity){
              value= value + values[k];
              capacity=capacity-weights[k];
              if(capacity==0)
              {
                return value;
                  } 
              }else if(weights[k]>capacity){
                value=value + a[j]*capacity;
                return value;
              }
          }
      }
    }
    return value;  
}

int main() {
  int n;
  int capacity;
  std::cin >> n >> capacity;
  vector<int> values(n);
  vector<int> weights(n);
  for (int i = 0; i < n; i++) {
    std::cin >> values[i] >> weights[i];
  }

  double optimal_value = get_optimal_value(n,capacity, weights, values);

  std::cout.precision(10);
  std::cout << optimal_value << std::endl;
  return 0;
}

输入

1 10 500 30

输出 160

但我希望答案是双精度值或浮点值 预期输出为

166.667

你们能帮帮我吗?

C++ 数组 算法 浮动精度 背包问题

评论

1赞 Yksisarvinen 3/30/2020
values[i]/weights[i]永远是有价值的。整数除法的行为是什么?int
0赞 Jesper Juhl 3/30/2020
推荐阅读:为什么我不应该 #include < bits/stdc++.h>?
0赞 Yksisarvinen 3/30/2020
这回答了你的问题吗?整数除法的行为是什么?

答:

0赞 NadavS 3/30/2020 #1

我查看了您的代码,我很确定只能返回整数值。例如,该行丢失了一个浮点值。我强烈建议使用调试器来密切关注您的程序并找出出错的地方。get_optimal_valuep=(values[i]/weights[i]);

2赞 Vlad from Moscow 3/30/2020 #2

在这样的表达式中

p=(values[i]/weights[i]);

或者像这样

if(a[j]==values[k]/weights[k])

在右手边使用了整数算术。

要获得浮点结果,您应该将其中一个操作数转换为 double 类型,例如

p = static_cast<double>( values[i] ) / weights[i];

if ( a[j] == static_cast<double>( values[k] ) / weights[k] )