cinderella-tzh 2021-09-01 19:13 采纳率: 100%
浏览 46
已结题

以下代码为什么要定义两次 i

BC100 有序序列合并
描述
输入两个升序排列的序列,将两个序列合并为一个有序序列并输出。
输入描述:
输入包含三行,

第一行包含两个正整数n, m(1 ≤ n,m ≤ 100),用空格分隔。n表示第二行第一个升序序列中数字的个数,m表示第三行第二个升序序列中数字的个数。

第二行包含n个整数(范围1~5000),用空格分隔。

第三行包含m个整数(范围1~5000),用空格分隔。
输出描述:
输出为一行,输出长度为n+m的升序序列,即长度为n的升序序列和长度为m的升序序列中的元素重新进行升序序列排列合并。
示例1
输入:
5 6
1 3 7 9 22
2 8 10 17 33 44
输出:
1 2 3 7 8 9 10 17 22 33 44

img


#define _CRT_SECURE_NO_WARNINGS 1
int main()
{
    int n = 0;
    int m = 0;
    scanf("%d %d", &n, &m);
    //输入
    int arr1[100] = { 0 };
    int arr2[100] = { 0 };
    int i = 0;
    for (i = 0; i<n; i++)
    {
        scanf("%d", &arr1[i]);
    }
    for (i = 0; i<m; i++)
    {
        scanf("%d", &arr2[i]);
    }
    //求值
    int j = 0;
      i = 0;
    while (i<n&&j<m)
    {
        if (arr1[i]<arr2[j])
        {
            printf("%d ", arr1[i]);
            i++;
        }
        else
        {
            printf("%d ", arr2[j]);
            j++;
        }
    }
    if (i == n)
    {
        for (; j<m; j++)
        {
            printf("%d ", arr2[j]);
        }
    }
    else
    {
        for (; i<n; i++)
        {
            printf("%d ", arr1[i]);
        }
    }
    return 0;
}

```

  • 写回答

2条回答 默认 最新

  • CSDN专家-sinJack 2021-09-01 19:16
    关注

    是将i的值重新初始化为0
    因为for循环和while循环共同操作了这个变量i
    在for循环中改变了i的值,while循环使用的时候,就要重新初始化i=0。
    为了方便理解,也可以重新定义一个变量j来去遍历while循环。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月9日
  • 已采纳回答 9月1日
  • 创建了问题 9月1日