等差数列问题,已知等差数列的前三项,问数列中首个值大于x的项是第几项?

输入一个正整数n,表示有n组测试案例。
每组案例由4个整数a,b,c,x表示,范围均在-5e+8到5e+8之间。
其中a,b,c是数列中第1项,第二项,第三项。
针对每组案例,输出一个整数y,表示数列中首个值大于x的项是第y项。如果数列中没有如何项能大于x,则输出-1。每组案例都要换行

那就看前三个数等差规律,循环计算后续项,如果后续项大于x则得到结果

#include <stdio.h>
int main()
{
    int a,b,c,x,n,i,t=0;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%d%d%d%x",&a,&b,&c,&x);
        if(x==a)
            printf("1\n");
        else if((x-a)*(b-a) < 0)
            printf("-1\n");
        else
        {
            t++;
            if(a + t*(b-a) > x)
                printf("%d\n",t);
        }
    }
    return 0;
}

等差数列,用前两项就能得出差值啊,第三项没啥用。代码如下:

#include <stdio.h>
int main()
{
    int i,n;
    int a,b,c,x;
    int shift;
    int k;
    scanf("%d",&n);
    for (i=0;i<n;i++)
    {
        scanf("%d %d %d %d",&a,&b,&c,&x);
        shift = b-a;
        if((x-a)/shift <0)
        {
            printf("-1\n");
            continue;
        }
        if(a>=x)
        {
            printf("1\n");
            continue;
        }
        k = 1;
        while(a+k*shift <= x)
            k++;
        printf("%d\n",k+1);
    }
    return 0;
}

递增数列和递减数列情况不同,第一步需要确定数列增减性,然后根据等差规律进行判定

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

void main()
{
    int n,a, b, c, x, s,y=-1;
    n=a = b = c = x = s = 0;
    scanf("%d",&n);
    for (int i = 0; i < n; i++)
    {
        scanf("%d %d %d %d",&a,&b,&c,&x);
        s = b - a;
        int num = 0;
        if (s<0)    //等差递减数列
        {
            if (a>x)
            {
                printf("数列中首个值大于%d的项是第%d项", x, 1);
            }
            else
            {
                printf("-1");
            }
        }
        else {        //等差递增数列
            while (1) {
                if ((a+s*num)>x)
                {
                    break;
                }
                num++;
            }
            printf("数列中首个值大于%d的项是第%d项", x, num+1);
        }
    }
}

数列前3项a,b,c应该有具体的值吧,如果没有找到规律怎么生成后面的项呢?