首页 > 代码库 > 石头数字的总和
石头数字的总和
Manasa 和 她的朋友出去徒步旅行。她发现一条小河里边顺序排列着带有数值的石头。她开始沿河而走,发现相邻两个石头上的数值增加 a 或者 b. 这条小河的尽头有一个宝藏,如果Manasa能够猜出来最后一颗石头上的数值,那么宝藏就是她的。假设第一个石头的上数值为0,找出最后一个石头的可能的所有数值。
输入格式
第一行包含整数 T, 代表测试数据的组数。
每组数组包含三行:
第一行包含 n,代表石头的个数
第二行包含 a
第三行包含 b
输出格式 升序输出最后一颗石头上所有可能的数值, 用空格隔开。
取值范围
1 ≤ T ≤ 10
1 ≤ n, a, b ≤ 103
样例输入 00
23 12410100
样例输出 00
2 3 4 30 120 210 300
样例解析
第一组数据所有可能的数值为:
- 0,1,2
- 0,1,3
- 0,2,3
- 0,2,4
所以答案是: 2 3 4
.
第二组数据所有可能的数值为:
- 10, 20, 30
- 10, 20, 120
- 10, 110, 210
- 100, 200, 300
所有答案是: 30 120 210 300
解决代码:
#include <stdio.h>int main(int argc, const char * argv[]){ // insert code here... int testCount = 0; int depth = 4; int a = 10; int b = 100; scanf("%d", &testCount); for (int i=0; i<testCount; i++) { scanf("%d", &depth); scanf("%d", &a); scanf("%d", &b); if (depth == 0) { printf("%d\n", 0); continue; } int sum = 0; depth = depth - 1; //是较大值在前面,这样输出结果是升序的。 if (a<b) { int tmp = a; a = b; b = tmp; } if (a == b) { printf("%d\n", a * depth); continue; } for (int i=0; i<=depth; i++) { int sumA = a * i; int sumB = b * (depth - i); sum = sumA + sumB; printf("%d ", sum); sum = 0; } printf("\n"); } return 0;}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。