输入一个正整数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应该有具体的值吧,如果没有找到规律怎么生成后面的项呢?