C语言实现有数列定义为:F(0) = a, F(1) =b,F(n) = F(n-1)+F(n-2), 且0 < a < b < 20.现给出a, b, n,请问F(n)能否被3整除.Standard Input 有多组测试数据.输入的第一行是整数T(1<=T<=20),表示随后测试数据的组数.每组测试数据的第一行是正整数a, b, m, a,b的含义如前所述, m表示随后有m行,每行为前面所述的n, 0 < m < 100, 0 < n < 10^9. Standard Output 对应每组测试数据,共输出m行,如果每行对应的F(n)能被3整除,则输出一行”Yes”,否则输出一行”No”.两组测试数据的输出间,请输出一行空行.
时间: 2024-02-24 09:58:40 浏览: 178
C语言实现能被2整除的数
您好,以下是对您的问题的回答:
这是一道典型的递归问题,可以使用递归函数来实现。具体实现方法如下:
```C
#include <stdio.h>
int F(int n, int a, int b) {
if (n == 0) {
return a;
} else if (n == 1) {
return b;
} else {
return F(n - 1, a, b) + F(n - 2, a, b);
}
}
int main() {
int T;
scanf("%d", &T);
while (T--) {
int a, b, m;
scanf("%d%d%d", &a, &b, &m);
while (m--) {
int n;
scanf("%d", &n);
if (F(n, a, b) % 3 == 0) {
printf("Yes\n");
} else {
printf("No\n");
}
}
if (T) {
printf("\n");
}
}
return 0;
}
```
上述代码中,函数`F(n, a, b)`用于计算第n项的值,参数a、b分别为F(0)和F(1)的值。在`main`函数中,首先输入测试数据组数T,然后循环处理每组测试数据。对于每组测试数据,先输入a、b、m的值,然后循环处理m个查询,输入n的值并调用函数F计算F(n)的值,最后判断F(n)是否能被3整除并输出相应的结果。注意在每组测试数据的输出之间需要输出一个空行。
希望这个回答能够解决您的问题。如果您还有其他问题,可以继续提问。
阅读全文