这是老师给我的问题
编写一个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。虽然使用这种解决方案会有一些挑战,关于如何处理中位数本身,如果有多个中位数(重复)怎么办?