我想把一个常数加到一个数字数组中,但在C中不同



例如,我有一个包含元素的数组
0 1 2 3 4 5 6
我想把3加到所有元素上,并希望得到以下输出:
3 4 5 6 0 1 2相加后,数字不应超过最大元素,而是从最小元素开始

很难解释。在c中有什么方法可以做到这一点吗?(非c++(

您所描述的似乎是以最大元素+1为模的加法,即大于最大元素的和。

  1. 通过迭代数组来找到最大元素,我们称之为max
  2. 再次对数组进行迭代,并对每个元素进行以max + 1为模的加法运算,即概念上的arr[i] = (arr[i] + n) % (max + 1)

(如果环绕不是零,而是最小元素,那么也可以在步骤1中找到最小值,并在步骤2中执行arr[i] = ((arr[i] - min + n) % ((max - min) + 1)) + min。(

如果我理解正确,您需要以下内容。

#include <stdio.h>
size_t max_element( const int a[], size_t n )
{
size_t max = 0;
for ( size_t i = 1; i < n; i++ )
{
if ( a[max] < a[i] ) max = i;
}
return max;
}
int main(void)
{
int a[] = { 0, 1, 2, 3, 4, 5, 6 };
const size_t N = sizeof( a ) / sizeof( *a );
int value = 0;
printf( "Enter a value to add to elements of the array: " );
scanf( "%d", &value );
size_t max = max_element( a, N );
int upper_value = a[max] + 1;
for ( size_t i = 0; i < N; i++ )
{
a[i] = ( a[i] + value ) % upper_value;
}
for ( size_t i = 0; i < N; i++ )
{
printf( "%d ", a[i] );
}
putchar( 'n' );
}

程序输出可能看起来像

Enter a value to add to elements of the array: 3
3 4 5 6 0 1 2 

相关内容

最新更新