使用循环* AND交换填充的数组

时间:2015-04-15 22:01:47

标签: c++ arrays loops

我在课堂上做了这个课程,我试图重新开始考试。该程序应该是一个数组[2] [10],并且应该按此顺序输出数字:

        1 3 5 7 9 11 13 15 17 19
        0 2 4 6 8 10 12 14 16 18

我真的迷失了,我真的可以使用任何帮助。

#include<iostream>
#include <string>
#include <cstring>
using namespace std;


void out(int n[2][10]);
void fillit(int n[2][10]);
int main(){
int nums[2][10];
fillit(nums);
out(nums);
}
void fillit(int n[2][10]){
n[0][0] = 1;
n[1][0] = 0;

for (int i = 1; i < 10; i++){
    n[0][i] = n[0][i] + 2;
    n[1][i] = n[0][i] + 2;
}
}
void out(int n[2][10]){
for (int r = 0; r <= 1; r++){
    for (int c = 0; c <= 9; c++){
        cout << n[r][c];
    }
    cout << endl;
}
}

更新我让程序成功填充数组,但现在我需要程序将第1行与第2行交换,然后输出新数组。即         0 2 4 6 8 10 12 14 16 18         1 3 5 7 9 11 13 15 17 19

4 个答案:

答案 0 :(得分:2)

void fillit(int n[2][10]){

 for (int i = 0; i < 10; i++){
    n[0][i] = (i * 2 ) + 1;
    n[1][i] = i * 2;
 }
}

答案 1 :(得分:0)

#include<iostream>
#include <string>
#include <cstring>
using namespace std;


void out(int n[2][10]);
void fillit(int n[2][10]);
int main(){
int nums[2][10];
fillit(nums);
out(nums);
}
void fillit(int n[2][10]){
n[0][0] = 1;
n[1][0] = 0;

for (int i = 1; i < 10; i++){
    n[0][i] = n[0][i-1] + 2;
    n[1][i] = n[0][i-1] + 2;
}
}
void out(int n[2][10]){
for (int r = 0; r <= 1; r++){
    for (int c = 0; c <= 9; c++){
        cout << n[r][c];
    }
    cout << endl;
}
}

答案 2 :(得分:0)

这个怎么样,它更短?

int nums[2][10];
for (int i = 0; i < 20; i++)
{
    nums[(i%2)^1][i/2] = i;
}

答案 3 :(得分:0)

我注意到第二个数组元素是偶数,第一个数组对应的元素是一个更大的(因而是奇数)...所以这个答案完成了 ONLY 的添加。可能更容易理解。

void fillit(int n[2][10])
{
    int even = 0; // start value

    for (size_t i = 0; i < 10; i++)
    {
       int odd  = even + 1;
       n[0][i] = odd;
       n[1][i] = even;  
       even += 2;
    }
}

我注意到你用C ++标记了这个问题。也许你应该试试矢量。

对于小向量,您只需在大括号中声明初始值,从而可以轻松定义矩阵限制[2]和[10]。在这个例子中,我使用易于识别的值初始化,因此您可以告诉2x10矩阵尚未填充。如果没有此init,则包含的值将是随机噪声。

std::vector<std::vector<int>> n {
   {  11,  12,  13,  14,  15,  16,  17,  18,  19, 20 }, // row 1
   {  21,  22,  23,  24,  25,  26,  27,  28,  29, 30 }  // row 2
   //  1    2    3    4    5    6    7    8    9  10   <-- col
}; 

是的,您可以写入输出的目标值,但不需要fillit()。

要将2x10向量传递给fillIt(),请记住您需要将矩阵标记为参考。以下强调n [0]包含奇数,n [1]包含10个偶数。

//                vector x vector        v--reference
void fillIt(std::vector<std::vector<int>>& n)
{
   int even = 0;
   for (size_t c = 0; c < 10; ++c) // row major {
      int odd = even + 1;
      n[0][c] = odd;
      n[1][c] = even;
      even += 2;
   }
}

对于测试,我建议只将2x10向量传递给新函数&#34; showIt()&#34;。

// do not modify--vvvvv                 do not copy--v
void vec2x10Show (const std::vector<std::vector<int>>& n)
{
   // header
   std::cout << "\nCOL->";
   for (int i=0; i<10; ++i) std::cout <<  std::setw(3) << i+1 << " ";

   std::cout << "\nr1:  "; //                              r  c
   for (int c=0; c<10; ++c) std::cout << std::setw(3) << n[0][c] << " ";

   std::cout << "\nr2:  "; //                              r  c
   for (int c=0; c<10; ++c) std::cout << std::setw(3) << n[1][c] << " ";

   std::cout << std::endl;
}

请注意硬编码的&#39; 10&#39;在每个循环中(一个幻数)。使用向量,这个幻数不是必需的,因为向量包含此信息(您的下一个分配)。