gpt4 book ai didi

c - 主循环设置什么参数

转载 作者:行者123 更新时间:2023-12-04 02:37:29 25 4
gpt4 key购买 nike

好的,所以我有一个家庭作业问题,如下所示:从数组中生成对 (b, c),其中 b 是最小的偶数,c 是最大的。在输出中写入数字,将它们从数组中移除并继续循环,直到没有更多的偶数,或者数组为空。

编辑:如果只有 1 个偶数,同时将其输出为最大和最小数,以便最终数组没有偶数。

这是我现在所做的:

int a[100], b, c, n;
b = 9999999;
c = -9999999;

printf("Input array length: ");
scanf("%d", &n);
printf("Input elements of array: ");

for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}

for (int i = 0; i < n; i++) {
if (a[i] < b && a[i] % 2 == 0)
b = a[i];
}

for (int i = 0; i < n; i++) {
if (a[i] > c && a[i] % 2 == 0)
c = a[i];
}

printf("\n%d %d\n", b, c);

return 0;

我在开始时为 b 和 c 设置了荒谬的值,这样我 99% 确定数组中的数字会比这些值低/高(我试图将它们设置为 NULL,但没有)。所以我的问题是如何设置将循环直到没有偶数或数组为空的主循环?还有另一种方法可以初始化 b 和 c。

此外,为了删除偶数,我正在考虑做这样的事情:

for (int i = pos; i < n; i++) 
a[i] = a[i+1];
n--;

其中 pos 是偶数元素的索引。

最佳答案

您无法调整数组的大小,但可以跟踪其实际元素的大小。

我假设如果数组中只有一个偶数元素,那么数组中就没有一对最小和最大偶数元素。所以在这种情况下,没有任何东西从数组中“移除”并且进程停止。但是,您可以更改方法并“删除”甚至单个偶数元素。

而要求移除元素的赋值意味着必须保持数组中元素的顺序。您可能无法对数组进行排序。也就是说,当您被要求从数组中删除一个元素时,这并不意味着您要对数组进行排序。:)

这是一个演示程序。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

struct Pair
{
size_t min;
size_t max;
};

struct Pair minmax_element( const int a[], size_t n )
{
struct Pair p = { n, n };

for ( size_t i = 0; i < n; i++ )
{
if ( a[i] % 2 == 0 )
{
if ( p.min == n || a[i] < a[p.min] ) p.min = i;
if ( p.max == n || a[p.max] < a[i] ) p.max = i;
}
}

return p;
}

int main(void)
{
enum { N = 20 };
int a[N];

srand( ( unsigned int )time( NULL ) );

for ( size_t i = 0; i < N; i++ ) a[i] = rand() % N;

for ( size_t i = 0; i < N; i++ )
{
printf( "%d ", a[i] );
}

putchar( '\n' );

int success = 1;
size_t n = N;

while ( success )
{
struct Pair p = minmax_element( a, n );

success = p.min != n && p.max != n;

if ( success )
{
printf( "minimum even number = %d, maximum even number = %d\n",
a[p.min], a[p.max] );

if ( p.max < p.min )
{
size_t tmp = p.min;
p.min = p.max;
p.max = tmp;
}

memmove( a + p.max, a + p.max + 1, ( n - p.max - 1 ) * sizeof( int ) );
--n;
memmove( a + p.min, a + p.min + 1, ( n - p.min - 1 ) * sizeof( int ) );
--n;
}
}

for ( size_t i = 0; i < n; i++ )
{
printf( "%d ", a[i] );
}

putchar( '\n' );

return 0;
}

它的输出可能看起来像

8 3 6 16 3 4 9 8 1 4 15 9 16 12 3 7 10 19 15 15 
minimum even number = 4, maximum even number = 16
minimum even number = 4, maximum even number = 16
minimum even number = 6, maximum even number = 12
minimum even number = 8, maximum even number = 10
3 3 9 8 1 15 9 3 7 19 15 15

正如在结果数组中看到的那样,有一个值为 8 的偶数元素,因为该数组没有更多的偶数元素来构成一对。

编辑:考虑您的评论

Oh sorry, I forgot to mention that if there is only 1 element (in this example 8), you simply output it 2 times at the and, as the lowest and biggest number, so that the final output has no even numbers.

演示程序如下所示

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

struct Pair
{
size_t min;
size_t max;
};

struct Pair minmax_element( const int a[], size_t n )
{
struct Pair p = { n, n };

for ( size_t i = 0; i < n; i++ )
{
if ( a[i] % 2 == 0 )
{
if ( p.min == n || a[i] < a[p.min] ) p.min = i;
if ( p.max == n || a[p.max] < a[i] ) p.max = i;
}
}

return p;
}

int main(void)
{
enum { N = 20 };
int a[N];

srand( ( unsigned int )time( NULL ) );

for ( size_t i = 0; i < N; i++ ) a[i] = rand() % N;

for ( size_t i = 0; i < N; i++ )
{
printf( "%d ", a[i] );
}

putchar( '\n' );

int success = 1;
size_t n = N;

while ( success )
{
struct Pair p = minmax_element( a, n );

success = p.min != n;

if ( success )
{
if ( p.max == n ) p.max = p.min;

printf( "minimum even number = %d, maximum even number = %d\n",
a[p.min], a[p.max] );

if ( p.max < p.min )
{
size_t tmp = p.min;
p.min = p.max;
p.max = tmp;
}

memmove( a + p.max, a + p.max + 1, ( n - p.max - 1 ) * sizeof( int ) );
--n;

if ( p.min != p.max )
{
memmove( a + p.min, a + p.min + 1, ( n - p.min - 1 ) * sizeof( int ) );
-- n;
}
}
}

for ( size_t i = 0; i < n; i++ )
{
printf( "%d ", a[i] );
}

putchar( '\n' );

return 0;
}

它的输出可能看起来像

3 10 0 12 16 0 13 11 15 16 6 8 11 10 11 12 4 14 4 3 
minimum even number = 0, maximum even number = 16
minimum even number = 0, maximum even number = 16
minimum even number = 4, maximum even number = 14
minimum even number = 4, maximum even number = 12
minimum even number = 6, maximum even number = 12
minimum even number = 8, maximum even number = 10
minimum even number = 10, maximum even number = 10
3 13 11 15 11 11 3

关于c - 主循环设置什么参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61000946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com