首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >得到未知的值和答案

得到未知的值和答案
EN

Stack Overflow用户
提问于 2020-10-14 15:28:14
回答 2查看 257关注 0票数 0

更小的大等号 PrepBuddy有N个篮子,每个篮子包含一个水果,每个篮子都有一些品质因子(第一个篮子有Ai质量因子),Tina有一个篮子,一个水果具有质量因子K。她想知道有多少PrepBuddy的篮子的质量因子比K低(L),有多少篮子的质量因子比K多(M),有多少篮子的质量因子与K相等。

输入格式第一行包含一个整数T,表示测试用例的数目。T测试用例如下:第一行包含两个空格分隔的整数N和K.The第二行包含N个空格分隔整数,表示篮子的质量因数。

在新行上输出每个测试用例的格式,打印三个空格分隔的整数,表示L、M和E的值。

约束1<=T<=100

1<=N,K<=10^5

−10^6<=Ai<=10^6

任何测试用例文件上的所有N的总和不超过5∗10^6

时间限制1秒

示例输入

2

5 2

-1 0 -3 1 2

5 3

1 -1 -5 2 4

输出

4 0 1

4 1 0

在第一个测试用例中,K=2,质量因子小于K的篮子是1,2,3,4,没有一个篮子的质量因子大于K,还有一个篮子5的质量因子等于K。

我的解决方案

代码语言:javascript
复制
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;

int main() {
  int t;
  cin >> t;
  while (t--) {
    ll n, k;
    cin >> n >> k;
    ll arr[n];
    for (ll i = 0; i < n; i++) {
      cin >> arr[i];
    }
    int less = 0, more = 0, equal = 0;
    for (ll i = 0; i < n; i++) {
      if (arr[i] < k) {
        less++;
      } else if (arr[i] > k) {
        more++;
      } else {
        equal++;
      }
      cout << less << " " << more << " " << equal << " ";
    }
    cout << endl;
  }
  return 0;
}

投入2

5 2

-1 0 -3 1 2

5 3

1 -1 -5 2 4

输出1 0 0 2 0 0 3 0 0 0 4 0 0 1

1 0 0 2 0 0 3 0 0 4 0 4 1 0

为什么我要得到更多的数字,比如1 0 0 2 0 0 0 3 0 0 0和我的answer.How来纠正这个问题呢?请帮帮忙

EN

回答 2

Stack Overflow用户

发布于 2020-10-14 16:14:03

代码中的错误非常简单,易于调试。每次打印输出时,都要通过数组运行,从而获得所有这些额外的打印。

如何使调试变得容易?重新组织代码,使其更具可读性,使其成为可能。实际上,修正是在移动线:

代码语言:javascript
复制
cout<<less<<" "<<more<<" "<<equal<<" ";

比原来低了两条线。为了演示它,下面是代码固定的和有组织的

代码语言:javascript
复制
#include <iostream>
#include <vector>
#include <cstdint>

int main()
{
    int t; 
    std::cin >> t;
    
    while(t--)
    {
        std::int64_t n,k; 
        std::cin >> n >> k;
        std::vector<int> vec{n};
        
        for(std::size_t i = 0; i < n; ++i)
        {
            std::cin >> vec[i];
        }

        int less=0, more=0, equal=0;

        for (std::size_t i = 0; i < n; i++)
        {
            if (vec[i] < k)
            {
                less++;
            }
            else if (vec[i] > k)
            {
                more++;
            }
            else
            {
                equal++;
            }
            // The next output line was here, under the for loop!!!
        }
        std::cout << less << " " << more<< " " << equal << " "; // this is its place!
        
        std::cout << std::endl;
    }
    return 0; 
}

我只作了3项修改:

#include <bit/stdc++.h>.

  • Realigned

  • 根据其逻辑顺序删除了using namespace std;和代码--每个新作用域都有自己的缩进级别,显示哪个命令在哪个作用域中运行,向每个事物显示mistake.
  1. Used的正确类型:在C++ 中,没有格式arr[n]中的动态数组,因此,您需要使用std::vector。此外,在cstdint中有固定的大小长度,您应该使用这些长度来确保您使用的类型是正确的。此外,如果可能,更喜欢使用unsigned值,例如,在索引时,可以使用std::size_tstd::uint32_tstd::size_t
票数 1
EN

Stack Overflow用户

发布于 2021-05-15 13:48:31

这段代码对我来说很好

代码语言:javascript
复制
#include <bits/stdc++.h>
using namespace std;

int main()
{
  int T,N,K,arr[N];
  cin>>T;
  while(T--)
  {
    cin>>N;
    cin>>K;
    for(int i=0;i<N;i++)
    {
      cin>>arr[i];
    }
    int L=0,M=0,E=0;
    for(int i=0;i<N;i++)
    {
      if(arr[i]<K){
        L++;
      }
      else if(arr[i]>K)
      {
        M++;
      }
      else{
        E++;
      }
    }
    cout<<L<<" "<<M<<" "<<E<<endl;
  }
  
  return 0;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64356672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档