C++如何读取输入N然后读取一串N长的数字?
C++ How to read input N and then read a series of numbers N long?
我正在做一项作业,我需要创建一个程序来读取一个非空的整数序列,并告知其中有多少个等于最后一个。
它应该读取序列的整数数量,然后读取序列本身和return最后一个数字重复自身的次数,不包括最后一个。
输入如下:
9
1 7 3 2 4 7 5 8 7
输出应该是:
2
现在,我对程序的功能没有任何问题,但我正在努力让它读取输入。这是我得到的:
#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)后出现分段错误(核心已转储)错误。
解决后编辑
这就是使用您的建议对我有用的方法。谢谢你。
我知道它是否不漂亮或者有更好更有效的方法,但我才刚刚开始。 :)
#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;
}
请不要苛求。我建议另一种方法来解决这个问题。
#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;
}
输入:
9
1 7 3 2 4 7 5 8 7
结果如下:
2
我正在做一项作业,我需要创建一个程序来读取一个非空的整数序列,并告知其中有多少个等于最后一个。
它应该读取序列的整数数量,然后读取序列本身和return最后一个数字重复自身的次数,不包括最后一个。
输入如下:
9
1 7 3 2 4 7 5 8 7
输出应该是:
2
现在,我对程序的功能没有任何问题,但我正在努力让它读取输入。这是我得到的:
#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)后出现分段错误(核心已转储)错误。
解决后编辑
这就是使用您的建议对我有用的方法。谢谢你。 我知道它是否不漂亮或者有更好更有效的方法,但我才刚刚开始。 :)
#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;
}
请不要苛求。我建议另一种方法来解决这个问题。
#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;
}
输入:
9
1 7 3 2 4 7 5 8 7
结果如下:
2