我们如何在C编程中将10的最大5个数字替换为1,将最小的5替换为0 ?

  • 本文关键字:替换 数字 我们 5个 编程 arrays c
  • 更新时间 :
  • 英文 :


这是老师给我的问题

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

最新更新