编写一个函数,从n个整数数组中删除所有10个。其余的元素应该根据需要向左移动到数组的开头,并且数组末尾的“空”空格应该设置为0,到目前为止,当我们运行sput.h测试时,代码运行不正常安全带
void without_tens(int *arr, int n) {
int i = 0;
for (int j = 0; arr[j] % 10 == 0 && j < n; j++) {
arr[j] = 0;
i = j;
while (i < n && arr[i] % 10 != 0 && arr[i + 1] != 0) {
arr[i + 1] = arr[i];
break;
}
}
}
答案 0 :(得分:1)
有几种方式......就是其中之一。
void remove_tens(int *arr, int len )
{
int i = 0, n = 0;
// Skip numbers 10 from de copy
for( i = 0 ; i < len ; i++ )
arr[i] != 10 ? arr[n++] = arr[i] : arr[n] = 0;
// Fill de array with 0
for( i = n ; i < len ; i++ )
arr[i] = 0;
}
第一个:不要复制10个号码,跳过它们
我将使用n
作为正确复制到数组的每个非10数字的索引。
// Skip numbers 10 from de copy
for( i = 0 ; i < len ; i++ )
arr[i] != 10 ? arr[n++] = arr[i] : arr[n] = 0;
那意味着...如果当前元素不同于10(arr[i] != 10
),则将该元素(arr[i]
)复制到结果数组并移动一个(arr[n++] = arr[i]
),如果没有,请不要移动,也不要复制任何内容(arr[n] = 0
)。
第二个:用0填充空格
从n(for( i = n...
)开始,填写0(arr[i] = 0;
)。
代码和Coliru
上的示例void remove_tens(int *arr, int len )
{
int i = 0, n = 0;
// Skip numbers 10 from de copy
for( i = 0 ; i < len ; i++ )
arr[i] != 10 ? arr[n++] = arr[i] : arr[n] = 0;
// Fill the array with 0
for( i = n ; i < len ; i++ )
arr[i] = 0;
}
int main ()
{
int numbers[5];
int i = 0;
numbers[0] = 4;
numbers[1] = 5;
numbers[2] = 10;
numbers[3] = 1;
numbers[4] = 10;
remove_tens(numbers, 5);
// Printing the result
for( i = 0 ; i < 5 ; i++ )
printf("%d", numbers[i] );
return 0;
}