首页 > 解决方案 > C - 将 2 for 循环重写为 1 for 循环以复制数组。

问题描述

我遇到了以下问题:

“在函数 main 中声明一个array名为 num1 的具有 30 个元素的整数,并声明一个array名为 num2 的具有 21 个元素的第二个整数。为 num1 的每个元素分配一个 1 到 50 之间的随机数;打印这些数字。

在 afor loop中,将前 21 个数字从 num1 复制到 num2。

在另一个for loop打印中,来自 num2 的元素值,每行七个值。找到一种算法,可以从一个循环而不是 3 个循环打印它们。"

我已经能够将范围缩小到 2 个 for 循环,但是我很难尝试将所有内容都放入一个 for 循环中。如果我不使用第二个 for 循环,我只是不确定如何将数组从 num1 复制到 num2。

这是我到目前为止所做的工作。它可以正确打印所有内容,但它在 2 个 for 循环中,而不是 1 个。

for (j = 0; j < 30; j++) // getting random numbers for num1
{
    num1[j] = 1 + rand() % (50 + 1 - 1);
    printf("%d ", num1[j]);

}
printf("\nThis is num2:\n"); 
for (j = 0; j < 21; j++) // copying num1 array into num2 array, and only taking the first 21 numbers
{
    num2[j] = num1[j];
    printf("%d ", num2[j]);
    if (x % 7 == 0) // this will print num2 with 3 rows each with 7 values 
    {
        printf("\n");

    }
    x++;
}

标签: carraysfor-looprandom

解决方案


格式不会是最漂亮的,但这应该是您需要的。诀窍是等到您填充它并从当前索引中减去以获得旧值。

int main(void) {
int num1[30];
int num2[21];

    for (int i = 0; i < 30; i++) {
        num1[i] = 1 + rand() % (50);
        printf("%d \n", num1[i]);

        if (i<21)
            num2[i] = num1[i];

        if (!(i%7))
            printf("%d %d %d %d %d %d %d\n", num2[i-6], num2[i-5], num2[i-4], num2[i-3], num2[i-2], num2[i-1], num2[i-0]);
        }

return 0;
}

推荐阅读