C语言 - ACM题目:数列(等差或等比数列)
2013-12-08 00:08
232 查看
题目: 小明有天在做数学题,碰到这样一个问题,只告诉你一个数列的前三个数,并且这个数列一定是等差数列或等比数列中的一种,问你这个数列的第k个数是什么。现在请你编程帮小明解答这个问题。
输入格式: 输入的第一行是一个整数n,表示共有n组数列。 接下来n行,每行输入四个整数,前三个数表示数列的前三个数,第四个数就是题目描述中的k。 其中0<k<=10^9,其他三个数的范围为[0,2^63)。题目保证输入的数列为非降序的。
输出: 对于每组数列,输出数列中的第k个数模(%)200907后的结果。
输入样式: 2 1 2 3 5 1 2 4 5
输出样式: 5 16
#include <stdio.h> int main() { int n, k, i,j, a[4]; scanf("%d", &n); for(j=1;j<=n;j++) { for(i=0; i<4; i++) scanf("%d", &a[i]); if(a[1] / a[0] == a[2] / a[1]) { k = a[1] / a[0]; for(i=0; i<a[3]-1; i++) a[0] = a[0] * k; } else if(a[1] - a[0] == a[2] - a[1]) { k = a[1] - a[0]; for(i=0; i<a[3]-1; i++) a[0] = a[0] + k; } printf("%d\n", a[0]); } return 0; }
// 标准答案 #include <stdio.h> #define MOD 200907 long long g(long long q, long long k) { long long sum = 1, a[1000], i = 0; while (k) { if (k % 2 != 0) a[i++] = 1; else a[i++] = 0; k /= 2; } i--; for (i; i >= 0; i--) { sum = (sum * sum) % MOD; if (a[i]) sum = (sum * q) % MOD; } return sum % MOD; } int main() { long long a, b, c, k, t, d, q; int n; scanf("%d", &n); while (n--) { scanf("%lld%lld%lld%lld", &a, &b, &c, &k); if (b - a == c - b) { d = b - a; t = ((((k - 1) % MOD) * (d % MOD)) % MOD + a % MOD) % MOD; printf("%lld\n", t); } else { q = b / a; printf("%lld\n", (a % MOD * g(q, k - 1)) % MOD); } } return 0; }
相关文章推荐
- C语言 - ACM题目:第一行输入n m,第二行输入一个数列,n为数列长度,m为要插入的值,排序后输出,m n为零时退出程序
- ACM题目:第一行输入n m,第二行输入一个数列,n为数列长度,m为要插入的值,排序后输出,m n为零时退出程序
- C语言 - ACM题目:大爱数字7
- 山东理工大学ACM平台题答案关于C语言 1238 求数列的和
- 素数C语言代码。ACM平台上总有些题目不是提交输出超限就是答案错误,,,,,,,,不懂,
- C语言 - ACM题目:平均绩点
- C语言 - ACM题目:解密信息
- C语言 - ACM题目:软件版本问题
- ACM 国内外几个网站 & 题目分类
- 几道经典c语言题目
- C语言算法--费式数列
- 面试过程中遇到的C语言题目[值得一看~]
- c语言实现分数数列求和
- 有趣的C语言题目
- 写的很好 链表的各种题目整理(C语言实现)
- 考察新人的两道c语言题目
- acm书中题目 j-10
- 理工大学ACM平台题答案关于C语言 1131 C/C++经典程序训练1---最大公约数与最小公倍数
- 理工大学ACM平台题答案关于C语言 2041 初级二十四点游戏
- C语言练习题目