目录
一.两个有序数组的合并
思路 1:
思路 2:(复杂,不做代码演示)
代码演示:(支持C99变长数组)
注意:
二.调整数组使奇数全部都位于偶数前面
思路 1:
代码演示:
思路2:
代码演示:
三.矩阵式的输入
这里的思想与“两个有序链表合并”相似
数组1从 i=0,数组2从 j=0,分别比较大小。小的放到 arr3 里,其与 arr3 的下标各 +1。多次比较。
若一个数组到头了,由于2个数组都是升序,将没到头的数组里,剩下的元素放到 arr3
里。
将 arr1 arr2 分别放到 arr3 里,再将 arr3 排序
int main()
{
int n = 0;
int m = 0;
scanf("%d %d", &n, &m);
int arr1[n];
int arr2[m];
int arr3[n + m];//注意:不能初始化
//arr1的输入
int i = 0;
for (i = 0; i < n; i++)
{
scanf("%d", &arr1[i]);
}
//arr2的输入
int j = 0;
for (j = 0; j < m; j++)
{
scanf("%d", &arr2[j]);
}
//合并数组
i = 0;
j = 0;
int q = 0;
while(i
int main()
{
int n = 0;
int m = 0;
scanf("%d %d", &n, &m);
int arr1[1000];
int arr2[1000];
int arr3[2000];
//......
注意:在 while 里的两个 while 如果不加 ( left
void move(int arr[], int sz)
{
int left = 0;
int right = sz - 1;
while (left
创建第二个数组,将第一个数组中奇数拿出来,放在 arr2 的前面;偶数在后面
int main()
{
int arr1[10] = { 0 };
int sz = sizeof(arr1) / sizeof(arr1[0]);
int arr2[sz];
int i = 0;
for (i = 0; i < sz; i++)
{
scanf("%d", &arr1[i]);
}
int l = 0;
int r = sz - 1;
for (i = 0; i < sz; i++)
{
if (arr1[i] % 2 == 0)//偶数放后面
{
arr2[r--] = arr1[i];
}
if (arr1[i] % 2 == 1)//奇数放前面
{
arr2[l++] = arr1[i];
}
if (l > r)
break;
}
for (i = 0; i < sz; i++)
{
printf("%d ", arr2[i]);
}
return 0;
}
我们想要输入 n 行 m 列的矩阵时
int main()
{
int n = 0;
int m = 0;
scanf("%d %d", &n, &m);
int arr[n][m];
int i = 0;
for (i = 0; i < n; i++)
{
int j = 0;
for (j = 0; j < m; j++)
{
scanf("%d", &arr[i][j]);
}
}
return 0;
}
注意:这里每输入一行,不需要 \n 换行。数组会找到它定义的空间
如果是不支持C99变长数组的编译器呢?
int main()
{
int n = 0;
int m = 0;
scanf("%d %d", &n, &m);
//请输入<1000的nm值
int arr[1000][1000];
int i = 0;
for (i = 0; i < n; i++)
{
int j = 0;
for (j = 0; j < m; j++)
{
scanf("%d", &arr[i][j]);
}
}
return 0;
}
我们这样写也不用考虑会不会打印成一排(打印错误),因为:
假定 n = 2 m = 3
当n和m的值确定时,想往里输入值的空间就确定了
本篇的分享就到这里了,感谢观看,如果对你有帮助,别忘了点赞+收藏+关注。
小编会以自己学习过程中遇到的问题为素材,持续为您推送文章