猫皇 发表于 2022-4-15 02:13:17

帮忙看看一道数组简单题

题目是:输入一个整数K,然后再输入K个整数。要求把这K个整数装进一个数组,然后选出其中的偶数,按照数组编号的倒叙输出,最后再输出偶数的个数N。
eg.
input:5 3 6 4 2 1
output:2 4 6 3

以下是我写的程序,没找到问题在哪,所以来求助qaq

#include<iostream>

using namespace std;

int main()
{
        int n;
        cin>>n;//之后要接收n个整数
        int a;//接收input的数组
        int save[]={0};//存放偶数的数组
        int save_count=0;//用来充当偶数数组索引&计数偶数个数的变量
       
        for(int i=0;i<n;i++)
        {
                cin>>a;
                if(a%2==0)//如果是偶数,那就装进save[]数组中,并且save_count++
                {
                        save=a;
                        save_count++;
                }
        }
       
        for(int i=save_count-1;i>=0;i--)//设计的倒叙输出
        {
                cout<<save;
        }
       
        cout<<save_count;//输出偶数个数
       
        return 0;
}

傻眼貓咪 发表于 2022-4-15 02:13:18

不定长数组就选用 vector,是 C++ 特有的动态数组类型,类似于 Python 的列表一样,可变长数组:#include <iostream>
#include <vector>

using std::cin, std::cout, std::endl, std::vector;

int main() {
        int K, N = 0, num;
        vector<int> arr; // 这里用 vector,STL vector 是可变长的动态数组
        cin >> K;
        while (K--) {
                cin >> num;
                arr.push_back(num); // 把这 K 个整数装进一个数组
        }
        for (vector<int>::iterator p = arr.end() - 1; p != arr.begin(); p--) { // 然后选出其中的偶数,按照数组编号的倒叙输出
                if (!(*p & 1)) {
                        cout << *p << " ";
                        N++;
                }
        }
        cout << N << endl; // 最后再输出偶数的个数N
        return 0;
}

wp231957 发表于 2022-4-15 06:25:32

貌似老编译器不接受int a;//接收input的数组
这样写法,这属于动态数组

jhq999 发表于 2022-4-15 09:40:25

本帖最后由 jhq999 于 2022-4-15 09:48 编辑

#include<iostream>

using namespace std;

int main()
{
      int n;
      cin>>n;//之后要接收n个整数
      int a;//接收input的数组
       // int save[]={0};///////////////////////////////////////////////////////没必要用动态数组
      int save_count=0;//用来充当偶数数组索引&计数偶数个数的变量
      
      for(int i=0;i<n;i++)
      {
                cin>>a;///////////////
                if(a%2==0)/////////确定一个偶数下标加一
                {
                        ///////////////////////save=a;
                        save_count++;
                }
      }
      
      for(int i=save_count-1;i>=0;i--)//设计的倒叙输出
      {
                cout<<a;/////////////////////
      }
      
      cout<<save_count;//输出偶数个数
      
      return 0;
}

#include<iostream>

using namespace std;

int main()
{
      int n;
      cin>>n;//之后要接收n个整数
      int a;//接收input的数组
       // int save[]={0};///////////////////////////////////////////////////////没必要用动态数组
      int save_count=0;//用来充当偶数数组索引&计数偶数个数的变量
      
      for(;n>0;n--)
      {
                cin>>a;///////////////
                if(a%2==0)/////////确定一个偶数下标加一
                {
                        ///////////////////////save=a;
                        save_count++;
                }
      }
      
      for(n=save_count-1;n>=0;n--)//设计的倒叙输出
      {
                cout<<a;/////////////////////
      }
      
      cout<<save_count;//输出偶数个数
      
      return 0;
}

猫皇 发表于 2022-4-15 12:04:40

傻眼貓咪 发表于 2022-4-15 09:43
不定长数组就选用 vector,是 C++ 特有的动态数组类型,类似于 Python 的列表一样,可变长数组:

啊,这个还没有学过耶,有没有办法修改一下我本来的程序,让他变得可行呀...我觉得我的思路很简单呀,选出偶数装进另一个数组,这一步不好实现吗?

猫皇 发表于 2022-4-15 12:06:25

jhq999 发表于 2022-4-15 09:40


请问是int a是动态数组,还是int save[]是呀。这样做的问题是什么呀..感谢!

jhq999 发表于 2022-4-15 12:16:08

本帖最后由 jhq999 于 2022-4-15 12:17 编辑

猫皇 发表于 2022-4-15 12:06
请问是int a是动态数组,还是int save[]是呀。这样做的问题是什么呀..感谢!
都是,我说错了

猫皇 发表于 2022-4-15 12:17:21

其实我的这个程序是可以运行的。
比如我输入5 1 2 3 4 5
他是可以输出4 2 2的
但是问题在于我也不知道为什么,有的就不对
比如输入5 2 4 6 8 10
他就会卡死在那里
还有比如输入10 1 2 3 4 5 6 7 8 9 4
输出的是8 6 4 2 4
最后一个输入的4不见了
问题到底在哪啊,是动态数组的问题吗

jhq999 发表于 2022-4-15 15:07:15

猫皇 发表于 2022-4-15 12:17
其实我的这个程序是可以运行的。
比如我输入5 1 2 3 4 5
他是可以输出4 2 2的


刚才用静态数组试了一下,没有问题

要不然你麻烦一点用
int *a=(int*)malloc(n*sizeof(int));
别忘了不用了free(a);
或者vs里用int *a=new int[;
别忘了不用了delete[] a;

pjcpjc 发表于 2022-4-15 16:46:06

int save[]={0};//存放偶数的数组
这个地方有问题,这个数组只能存储一个元素
页: [1]
查看完整版本: 帮忙看看一道数组简单题