任何人都有更好的解决方案或方法

时间:2019-11-05 08:34:42

标签: c

我想计算左边组中的行数是否是使该程序可以接受的配置。如果没有可接受的配置,则输出-1。程序在左a(X)中间b(x + 1)和右c(x + 2)处。有没有人比我的解决方案更好?

#include<stdio.h>

int main(void)
{
    int chairs,a,b,c,result;
    scanf("%d %d %d %d", &chairs,&a ,&b , &c);
    for(int i=1; i<=chairs; i++)
    {
        result= (a*(i)) + (b*(i+1)) + (c*(i+2));
        if(chairs == result)
        {
            printf("%d", i);
            break;
        }
        else if(i == chairs && chairs != result)
            printf("-1");
    }
}

2 个答案:

答案 0 :(得分:1)

这是一个数学问题。

a * x + b * (x + 1) + c * (x + 2) = chair

a * x + b * x + b + c * x + 2 * c = chair

a * x + b * x + c * x = chair - b - 2 * c

x * (a + b + c) = chair - b - 2 * c

x = (chair - b - 2 * c) / (a + b + c)

这可以通过1个操作解决。如果a + b + c == 0

无法解决

答案 1 :(得分:1)

它归结为一个数学问题

if ( (a+b+c) == 0)  return -1 ;
X = (Chairs - b - 2c) / (a+b+c) , Y = (Chairs - b - 2c) % (a+b+c)
if X > 0 && X <= Chairs && y == 0 
 return X ;
else 
return -1 ;