首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++如何读取输入N,然后读取一系列数字N长?

C++如何读取输入N,然后读取一系列数字N长?
EN

Stack Overflow用户
提问于 2021-11-24 15:12:50
回答 1查看 512关注 0票数 0

我正在做一个任务,我需要创建一个程序来读取一个非空的整数序列,并告诉他们中有多少等于最后一个。

它应该读取序列所包含的整数数量,然后读取序列本身,并返回最后一个数字重复自己的次数(不包括最后一个整数)。

输入如下:

代码语言:javascript
运行
复制
9
1 7 3 2 4 7 5 8 7

其产出应是:

代码语言:javascript
运行
复制
2

现在,我对程序的功能没有问题,但我很难让它读取输入。这就是我得到的:

代码语言:javascript
运行
复制
#include <iostream>
#include <vector>
#include <sstream>

int NumbersEqualToLast(int limit, std::vector<int> elements) {
  int check = elements[limit], counter = 0;
  for (int i = limit; i >= 0; i--) {
    if (elements[i] == check) {
      counter++;
    }
  }
  return(counter);
}

int main() {
  int amount, number;
  std::cin >> amount;

  std::string input;
  getline(std::cin, input);
  std::stringstream iss(input);
  std::vector<int> numbers;
  while ( iss >> number ) {
    numbers.push_back( number );
  }
  std::cout << NumbersEqualToLast(amount, numbers) << std::endl;
} 

问题是,在读取整数数量(在本例中为9)之后,我得到了一个分段错误(核心转储)错误。

解题后编辑

这就是你的建议对我有用的地方。谢谢。我明白,如果它不漂亮,或者有更好的更有效的方法,但我只是刚刚开始。:)

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

int NumbersEqualToLast(int limit, std::vector<int> elements) {
  int check = elements[limit - 1], counter = 0;
  for (int i = limit - 2; i >= 0; i--) {
    if (elements[i] == check) {
      counter++;
    }
  }
  return(counter);
}

int main() {
  int quantity;
  std::cin >> quantity;
  int number;
  std::vector<int> numbers;
  for (int i = 0; i < quantity; i++) {
    std::cin>>number;
    numbers.push_back(number);
  }
  std::cout << NumbersEqualToLast(quantity, numbers) << std::endl;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-24 15:36:38

只是不要做出严厉的判断,请。我建议另一种方法来解决这个问题。

代码语言:javascript
运行
复制
#include <iostream>
#include <vector>
using namespace std;
int special, count;
void dfs(int current, int previous, vector<int>& visited, vector<int>& input)
{
    if(visited[current]==1)
    {
        return;
    }
    visited[current]=1;
    if(current==(input.size()-1))
    {
        special=input[current];
    }
    for(int next=(current+1); next<input.size(); ++next)
    {
        if(next==previous)
        {
            continue;
        }
        dfs(next, current, visited, input);
    }
    if(special==input[current])
    {
        ++count;
    }
    if(current==0)
    {
        --count;
        cout<<count;
    }
    return;
}
void solve()
{
    int quantity;
    cin>>quantity;
    int number;
    vector<int> numbers;
    for(int i=0; i<quantity; ++i)
    {
        cin>>number;
        numbers.push_back(number);
    }
    vector<int> visited(quantity);
    dfs(0, -1, visited, numbers);
    return;
}
int main()
{
    solve();
    return 0;
}

输入:

代码语言:javascript
运行
复制
9
1 7 3 2 4 7 5 8 7

结果如下:

代码语言:javascript
运行
复制
2
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70098533

复制
相关文章

相似问题

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