在两个数字之间平均分配价值

时间:2020-10-05 15:13:07

标签: c

我有三个字段A,B,C。我需要使A和B的总和始终等于C。

要求: 1.)如果sum(a,b)

2。)如果sum(a,b)> C,则从A,B中减去值,使得A + B = C。 A,B绝对不能为负。

int main ( )
{
    int a , b, c;

    scanf("%d %d %d\n", a, b, c );
  
    distrbute_c_among_a_b ( &a, &b, &c )

}
void distrbute_c_among_a_b( int a , int b, int c )
{
  // How to do this..
   if ( c >= ( a +  b) )
   {
        
        
    }//
        
   if ( c < (a+ b) )
    {
        
     // ??
     }
            
            }

1 个答案:

答案 0 :(得分:0)

您的功能需要

void distrbute_c_among_a_b( int* a , int* b, const int c )

根据需要更改ab。并这样称呼:

distrbute_c_among_a_b(&a , &b, c);

这是解决一半问题的一种方法

if ( c > (*a + *b) )
{
    int diff = c - *a + *b;
    *a = *a + diff/2 + (diff & 1);
                     // ^^^^^^^^
                     // If diff is odd, it adds 1 more two a
    *b = *b + diff/2;
    return;
 }

另一半非常相似-除了您还需要确保ab最终不会为负数。

对于scanf

首先,您需要传递指针-如:

scanf("%d %d %d\n", &a, &b, &c );

但也:始终检查返回值

if (scanf("%d %d %d\n", &a, &b, &c ) != 3)
{
    // Input error
    exit(1);
}
相关问题