arrays - 我们如何在 C 编程中将 10 的数组中最大的 5 个数字替换为 1,将最小的 5 替换为 0?
问题描述
这是我的老师给我的问题
编写一个 C 程序,将 10 个整数存储在一个大小为 10 的数组中,并显示该数组的内容。将数组中最高的 5 个数字替换为 1,将最低的 5 个数字替换为 0,并显示新数组的内容。[例如原始阵列 44 11 6 99 30 78 32 31 66 55 新阵列 1 0 0 1 0 1 0 0 1 1
我整天都在为这个问题苦苦挣扎:(
解决方案
有很多方法可以解决这个问题。一个好的方法是将数组排序到另一个数组中,然后用 0 替换前半部分,用 1 替换后半部分,如下所示:
#include<stdio.h>
int main(){
const int arraySize = 10;
int i, j;
int arr[arraySize];
int arrSorted[arraySize];
int temp;
// Get input from user
printf("Please enter 10 numbers!\n");
for (i = 0; i < arraySize; i++)
{
scanf("%d", &arr[i]);
// Copy array into another to sort it later
arrSorted[i] = arr[i];
}
// Print input
printf("Input: ");
for (i = 0; i < arraySize; i++)
{
printf("%3d ", arr[i]);
}
printf("\n");
//Sort the array in ascending order
for (i = 0; i < arraySize; i++)
{
for (j = i + 1; j < arraySize; j++)
{
if(arrSorted[i] > arrSorted[j])
{
temp = arrSorted[i];
arrSorted[i] = arrSorted[j];
arrSorted[j] = temp;
}
}
}
// Start replacing procedure
for (i = 0; i < arraySize; i++)
{
for (j = 0; j < arraySize; j++)
{
if (arr[j] == arrSorted[i])
{
if (i < arraySize / 2) // Replace 1st half with 0s
{
arr[j] = 0;
}
else // Replace 2nd half with 1s
{
arr[j] = 1;
}
break;
}
}
}
// Print result
printf("Result: ");
for (i = 0; i < arraySize; i++)
{
printf("%3d ", arr[i]);
}
printf("\n");
return 0;
}
当然,如果您不想自己排序,可以使用 C 标准库的 qsort() 函数。
另一种解决方案是,找到数组的中位数,然后将小于它的任何数字替换为 0,将任何大于它的数字替换为 1。尽管使用此解决方案,关于如何处理中位数本身会有一些挑战如果有多个中位数(重复)怎么办?
推荐阅读
- c# - 如何在 Xamarin.Forms 中获取连接的 SSID?
- python - 运行代码时龟屏崩溃
- excel - 循环通过表将值添加到另一个
- c - CVE-2020-8794 是合乎逻辑的问题吗?
- c++ - CMake 和 GMake 有什么区别?
- arrays - 在excel中向下拖动索引匹配公式时更改行引用
- python - 在 numpy 中输入作为 sin 而不是 Np.sin() 的输入
- r - 删除ui后插入UI的问题
- python - Pandas 数据框将列与一个值进行比较,并将这一行和上一行放入另一个数据框
- python - 无法在命令“python manage.py runserver”上看到 Django 默认页面