2016第七届蓝桥杯省赛C组试题及部分答案
2016-05-18 15:35
531 查看
答案都是自己理解的
1.报纸页数
X星球日报和我们地球的城市早报是一样的,
都是一些单独的纸张叠在一起而已。每张纸印有4版。
比如,某张报纸包含的4页是:5,6,11,12,
可以确定它应该是最上边的第2张报纸。
我们在太空中捡到了一张X星球的报纸,4个页码分别是:
1125,1126,1727,1728
请你计算这份报纸一共多少页(也就是最大页码,并不是用了几张纸哦)?
请填写表示总页数的数字。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
2.煤球数目
有一堆煤球,堆成三角棱锥形。具体:
第一层放1个,
第二层3个(排列成三角形),
第三层6个(排列成三角形),
第四层10个(排列成三角形),
....
如果一共有100层,共有多少个煤球?
请填表示煤球总数目的数字。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
3.平方怪圈
如果把一个正整数的每一位都平方后再求和,得到一个新的正整数。
对新产生的正整数再做同样的处理。
如此一来,你会发现,不管开始取的是什么数字,
最终如果不是落入1,就是落入同一个循环圈。
请写出这个循环圈中最大的那个数字。
请填写该最大数字。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
4和5略过
6.15分
凑算式
B DEF
A + --- + ------- = 10
C GHI
(如果显示有问题,可以参见【图1.jpg】)
这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。
比如:
6+8/3+952/714 就是一种解法,
5+3/1+972/486 是另一种解法。
这个算式一共有多少种解法?
注意:你提交应该是个整数,不要填写任何多余的内容或说明性文字。
7.19分
寒假作业
现在小学的数学题目也不是那么好玩的。
看看这个寒假作业:
□ + □ = □
□ - □ = □
□ × □ = □
□ ÷ □ = □
(如果显示不出来,可以参见【图1.jpg】)
每个方块代表1~13中的某一个数字,但不能重复。
比如:
6 + 7 = 13
9 - 8 = 1 3 * 4 = 12
10 / 2 = 5
以及:
7 + 6 = 13
9 - 8 = 1
3 * 4 = 12
10 / 2 = 5
就算两种解法。(加法,乘法交换律后算不同的方案)
你一共找到了多少种方案?
请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
8.21分
冰雹数
任意给定一个正整数N,
如果是偶数,执行: N / 2
如果是奇数,执行: N * 3 + 1
生成的新的数字再执行同样的动作,循环往复。
通过观察发现,这个数字会一会儿上升到很高,
一会儿又降落下来。
就这样起起落落的,但最终必会落到“1”
这有点像小冰雹粒子在冰雹云中翻滚增长的样子。
比如N=9
9,28,14,7,22,11,34,17,52,26,13,40,20,10,5,16,8,4,2,1
可以看到,N=9的时候,这个“小冰雹”最高冲到了52这个高度。
输入格式:
一个正整数N(N<1000000)
输出格式:
一个正整数,表示不大于N的数字,经过冰雹数变换过程中,最高冲到了多少。
例如,输入:
10
程序应该输出:
52
再例如,输入:
100
程序应该输出:
9232
PS 自从工作之后,几乎没个人时间,这个博客也有半年没更新了。我想我必须每天都学习新的知识了!(28号北大决赛,也算公费旅游)
1.报纸页数
X星球日报和我们地球的城市早报是一样的,
都是一些单独的纸张叠在一起而已。每张纸印有4版。
比如,某张报纸包含的4页是:5,6,11,12,
可以确定它应该是最上边的第2张报纸。
我们在太空中捡到了一张X星球的报纸,4个页码分别是:
1125,1126,1727,1728
请你计算这份报纸一共多少页(也就是最大页码,并不是用了几张纸哦)?
请填写表示总页数的数字。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
/************************************************************************/ /* 报纸页数 * 写完之后用例题数据测了下就提交了 */ /************************************************************************/ #include <stdio.h> int main() { int a, b, c, d; scanf("%d%d%d%d", &a, &b, &c, &d); //上面*张 下面*张 共*张 共*页 printf("%d %d %d %d\n", (c - b) / 4, b / 2, (c - b) / 4 + b / 2, ((c - b) / 4 + b / 2)*4); return 0; }
2.煤球数目
有一堆煤球,堆成三角棱锥形。具体:
第一层放1个,
第二层3个(排列成三角形),
第三层6个(排列成三角形),
第四层10个(排列成三角形),
....
如果一共有100层,共有多少个煤球?
请填表示煤球总数目的数字。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
/************************************************************************/ /* 煤球数目 * 刚开始一直在想象着它是怎么摆放的,然并卵,想不出来,最后直接用了个公式 */ /************************************************************************/ #include <stdio.h> int main() { int i,n,sum; sum = 0; n = 0; for (i = 1; i <= 100; ++i) { n +=i; sum += n; printf("%d\n", n); } printf("%d\n", sum); return 0; }
3.平方怪圈
如果把一个正整数的每一位都平方后再求和,得到一个新的正整数。
对新产生的正整数再做同样的处理。
如此一来,你会发现,不管开始取的是什么数字,
最终如果不是落入1,就是落入同一个循环圈。
请写出这个循环圈中最大的那个数字。
请填写该最大数字。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
/************************************************************************/ /* 平方怪圈 * 我随机输了个数字,跑出100个结果,很明显的循环。。。 */ /************************************************************************/ #include <stdio.h> int main() { int i,j,n,sum; scanf("%d", &n); for (i = 1; i < 100;i++) { sum = 0; while (n) { j = n % 10; sum += j*j; n /= 10; } n = sum; printf("%d\n", sum); } return 0; }
4和5略过
6.15分
凑算式
B DEF
A + --- + ------- = 10
C GHI
(如果显示有问题,可以参见【图1.jpg】)
这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。
比如:
6+8/3+952/714 就是一种解法,
5+3/1+972/486 是另一种解法。
这个算式一共有多少种解法?
注意:你提交应该是个整数,不要填写任何多余的内容或说明性文字。
/************************************************************************/ /* 凑算式 * 暴搜+剪枝 */ /************************************************************************/ #include<stdio.h> int a[10], b, c, sum = 0; bool isVisit[10]; void dfs(int num) { if (10==num) { b = a[2] * (a[7] * 100 + a[8] * 10 + a[9]); //通分 c = a[3] * (a[4] * 100 + a[5] * 10 + a[6]); if (0==(b + c) % (a[3] * (a[7] * 100 + a[8] * 10 + a[9]))) //判断后两个数相加是否为整数 { if (10==a[1] + (b + c) / (a[3] * (a[7] * 100 + a[8] * 10 + a[9]))) //判断三个数相加是否为10 sum++; } } for (int i = 1; i < 10; i++) { if (isVisit[i] == 0) { isVisit[i] = 1; a[num] = i; dfs(num + 1); isVisit[i] = 0; } } } int main() { dfs(1); printf("%d\n", sum); return 0; }
7.19分
寒假作业
现在小学的数学题目也不是那么好玩的。
看看这个寒假作业:
□ + □ = □
□ - □ = □
□ × □ = □
□ ÷ □ = □
(如果显示不出来,可以参见【图1.jpg】)
每个方块代表1~13中的某一个数字,但不能重复。
比如:
6 + 7 = 13
9 - 8 = 1 3 * 4 = 12
10 / 2 = 5
以及:
7 + 6 = 13
9 - 8 = 1
3 * 4 = 12
10 / 2 = 5
就算两种解法。(加法,乘法交换律后算不同的方案)
你一共找到了多少种方案?
请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
/************************************************************************/ /* 寒假作业 * 暴搜+剪枝 */ /************************************************************************/ #include<stdio.h> int a[14], b, c, sum = 0; bool isVisit[14]; bool test(int next) { if (3 == next) { if (a[1] + a[2] != a[3]) { return false; } } if (6 == next) { if (a[4] - a[5] != a[6]) { return false; } } if (9 == next) { if (a[7] * a[8] != a[9]) { return false; } } if (12 == next) { if (a[10] / a[11] != a[12] || a[10] % a[11] != 0) { return false; } } return true; } void dfs(int num) { if (13 == num) { if ((a[3] == a[1] + a[2]) && (a[6] == a[4] - a[5]) && (a[9] == a[7] * a[8]) && (a[12] == a[10] / a[11])) { sum++; } } for (int i = 1; i <= 13; i++) { if (isVisit[i] == 0) { isVisit[i] = 1; a[num] = i; if (!test(num)) { isVisit[i] = 0; continue; } dfs(num + 1); isVisit[i] = 0; } } } int main() { dfs(1); printf("%d\n", sum); return 0; }
8.21分
冰雹数
任意给定一个正整数N,
如果是偶数,执行: N / 2
如果是奇数,执行: N * 3 + 1
生成的新的数字再执行同样的动作,循环往复。
通过观察发现,这个数字会一会儿上升到很高,
一会儿又降落下来。
就这样起起落落的,但最终必会落到“1”
这有点像小冰雹粒子在冰雹云中翻滚增长的样子。
比如N=9
9,28,14,7,22,11,34,17,52,26,13,40,20,10,5,16,8,4,2,1
可以看到,N=9的时候,这个“小冰雹”最高冲到了52这个高度。
输入格式:
一个正整数N(N<1000000)
输出格式:
一个正整数,表示不大于N的数字,经过冰雹数变换过程中,最高冲到了多少。
例如,输入:
10
程序应该输出:
52
再例如,输入:
100
程序应该输出:
9232
/************************************************************************/ /* 冰雹数 * */ /************************************************************************/ #include<stdio.h> int ans[1000000],i,t_max; int next(int num) { t_max = num; while (1 != num) { while (0 == num % 2) { num /= 2; } if (1==num) { break; } num = num * 3 + 1; if (num>t_max) { t_max = num; } } return t_max; } void offLine() { for (i = 2; i < 500000; i++) { ans[i] = next(i); if (ans[i] < ans[i - 1]) { ans[i] = ans[i - 1]; } printf("%d %d\n",i, ans[i]); } } int main() { int n; offLine(); scanf("%d", &n); printf("%d\n", ans ); return 0; }
PS 自从工作之后,几乎没个人时间,这个博客也有半年没更新了。我想我必须每天都学习新的知识了!(28号北大决赛,也算公费旅游)
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- 解析C++中派生的概念以及派生类成员的访问属性