我有三个字段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) )
{
// ??
}
}
答案 0 :(得分:0)
您的功能需要
void distrbute_c_among_a_b( int* a , int* b, const int c )
根据需要更改a
和b
。并这样称呼:
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;
}
另一半非常相似-除了您还需要确保a
和b
最终不会为负数。
对于scanf
:
首先,您需要传递指针-如:
scanf("%d %d %d\n", &a, &b, &c );
但也:始终检查返回值
if (scanf("%d %d %d\n", &a, &b, &c ) != 3)
{
// Input error
exit(1);
}