如何在C++中打印13位数数组[已关闭]

tcomlyy6  于 2023-02-14  发布在  其他
关注(0)|答案(3)|浏览(125)

这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
昨天关门了。
Improve this question
我试图创建一个13位数的数组,并将其填充到一个循环中,从48开始,偶数递减。我无法确切地告诉如何使用我的代码才能使其工作。

#include <iostream>

using namespace std;

int main() {
    const int size = 13;
    int arr[size] = {0,0,0,0,0,0,0,0,0,0,0,0,0};
      int a = 50;    
  while (a > 0){ 
    a-=2;
    cout << a << " " << endl;
  for (int i = 0; i < size; i++)
    {
      arr[i] = a;
      cout << i << " " << arr[i] << endl;
    }
  }
}

这是给一堆废话,我不明白。

u4dcyp6a

u4dcyp6a1#

使用迭代器和算法的无循环解决方案

using namespace std;
int main(int argc, char * argv[])
{
    constexpr int N= 13;
    array<int, N> t;
    iota(t.begin(), t.end(),0);
    transform(t.begin(), t.end(), t.begin(), [](int x) { return 48-2*x;});
    copy(t.begin(), t.end(), ostream_iterator<int>(cout, " "));
    return 0;
}
ryevplcw

ryevplcw2#

我不知道你为什么会有外循环,但看起来你对编码还是个新手,所以我不会给予你任何你不懂的东西,但我会解释为什么你会得到“一堆你不懂的废话"。

while (a > 0){ 
  a-=2;
  cout << a << " " << endl;

这将在a大于0时运行,但每次循环重新启动时都会这样做。

for (int i = 0; i < size; i++)
{
    arr[i] = a;
    cout << i << " " << arr[i] << endl;
}

因此会出现很多数字,你并不是真的在数组中“插入”一个数字,而是在每个循环中“替换”整个数组。Have a look at this, I inserted a few outputs which would show what is happening in your code.
不需要修改太多的代码,这里有一种方法可以做到这一点,而不是执行while(a > 0),只需使用for循环遍历Array,然后在每个循环中将a递减2,因为您的目标只是用13的大小填充array,而不需要等到a中的正数用完。

int main() {
    const int size = 13;
    int arr[size] = {0,0,0,0,0,0,0,0,0,0,0,0,0};
    int a = 50;    
    for (int i = 0; i < size; i++)
    {
        a-=2;
        arr[i] = a;
        cout << i << " " << arr[i] << endl;
    }
}

最后,下次请正确缩进您的代码,这将使您更容易理解您的代码,不仅对我们,而且对您也是如此。

vsaztqbk

vsaztqbk3#

使用两个基于范围的for循环就足够了。

const int size = 13;
int arr[size];

int value = 48;
for ( auto &item : arr )
{
    item = value;
    value -= 2;
}

for ( const auto &item : arr )
{
    std::cout << item << ' ';
}
std::cout << '\n';

如果要用递减范围[48, 0)中的偶数填充数组,则数组需要包含24元素,而不是13元素。
这是一个演示程序,其中使用的不是基于范围的for循环,而是标准算法(当然,您可以使用上面显示的基于范围的for循环)。

#include <iostream>
#include <iterator>
#include <algorithm>

int main()
{
    const int N = 48;
    int arr[N / 2];

    int value = N + 2;
    std::generate( std::begin( arr ), std::end( arr ), 
                   [&value] { return value -= 2; } );

    std::copy( std::begin( arr ), std::end( arr ),
               std::ostream_iterator<int>( std::cout, " " ));
    std::cout << '\n';
}

程序输出为

48 46 44 42 40 38 36 34 32 30 28 26 24 22 20 18 16 14 12 10 8 6 4 2

同样,如果需要一个只有13元素的数组,则显式声明它,如下所示

int arr[13];

至于您的代码,当在外部while循环中重新输出内部for循环中的数组时,将其所有元素设置为a的当前值。

while (a > 0){ 
    a-=2;
    cout << a << " " << endl;
  for (int i = 0; i < size; i++)
    {
      arr[i] = a;
      cout << i << " " << arr[i] << endl;
    }
  }

这没有道理。

相关问题