没有合适的资源?快使用搜索试试~ 我知道了~
2016第七届蓝桥杯CC++-B组题解【范本模板】.pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 114 浏览量
2023-04-03
21:41:59
上传
评论
收藏 1.18MB PDF 举报
温馨提示
试读
23页
。
资源推荐
资源详情
资源评论
第一题
煤球数目
有一堆煤球,堆成三角棱锥形。具体:
第一层放 1 个,
第二层 3 个(排列成三角形),
第三层 6 个(排列成三角形),
第四层 10 个(排列成三角形),
。.。.
如果一共有 100 层,共有多少个煤球?
请填表示煤球总数目的数字。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字.
这道题坑死了,第一次看堆成三角棱锥形,草稿本画半天都没画出个三角棱锥.后来单独
看每句话才知道每层一个三角形叠起来就是三角棱锥。我去。
看懂题目这个题目就很简单了,每层的个数是上层的个数加上层数,意思就是An =
An—1 + n,然而题目是求的前 100 层一共多少煤球。所以是 Sn。代码双重 for 循环就出来
了。答案是:171700
1.
#include〈stdio。h〉
2.
int main()
3.
{
4.
int a[101] ={0};
5.
for(int i = 1 ; i 〈 101 ; i ++)
6.
a[i] = a[i-1] + i;
7.
int ans = 0;
8.
for(int j = 1 ; j 〈 101 ; j ++)
9.
ans += a[j];
10.
printf(”%d”,ans);
11.
return 0;
12.
}
第二题
:
生日蜡烛
某君从某年开始每年都举办一次生日 party,并且每次都要吹熄与年龄相同根数的蜡烛.
现在算起来,他一共吹熄了 236 根蜡烛。
请问,他从多少岁开始过生日 party 的?
请填写他开始过生日 party 的年龄数.
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
呵呵,水题,但是出题人不严谨啊!!!怎么就不能考虑万一他今年 236 岁呢。。。。好
了不说了强迫症犯了。
蓝桥杯这种不像 acm 的题目的,能暴力直接暴力。不用想太多。直接从 1~236 枚举
start, end 分别表示他开始过生日的年龄和今年的年龄,然后计算之间吹蜡烛的总和如果
等于 236 就输出 start ,end。 答案是:26
1.
#include<stdio。h〉
2.
int main()
3.
{
4.
int start,end;
5.
for(start = 1 ; start 〈 236 ; start ++)
6.
{
7.
for( end = start ; end 〈 236 ; end ++ )
8.
{
9.
int sum = 0;
10.
for(int i = start; i 〈= end; i ++)
11.
sum += i;
12.
if( sum == 236)
13.
{
14.
printf(”start : %d end : %d\n”,start,end);
15.
}
16.
}
17.
}
18.
return 0;
19.
}
第三题:
凑算式
B DEF
A + - + ———- = 10
C GHI
(如果显示有问题,可以参见【图 1.jpg】)
这个算式中 A~I 代表 1~9 的数字,不同的字母代表不同的数字.
比如:
6+8/3+952/714 就是一种解法,
5+3/1+972/486 是另一种解法.
这个算式一共有多少种解法?
注意:你提交应该是个整数,不要填写任何多余的内容或说明性文字。
这个题不多说了,直接暴力生成 9 的全排列然后去验证等式是否成立,只是验证的时候
如果防止精度问题可以通分把除法变成乘法。
答案是:29
1.
#include<stdio.h〉
2.
int ans = 0;
3.
int num[10];
4.
bool visit[10];
5.
6.
void Solve()
7.
{
8.
double sum = num[0] + (double)num[1] / num[2] + (double)
(num[3]*100+num[4]*10+num[5])/(num[6]*100+num[7]*10+num[8]);
9.
if(sum == 10)
10.
{
11.
ans ++;
12.
}
13.
}
14.
15.
void dfs(int index)
16.
{
17.
if(index == 9)
18.
{
19.
Solve();
20.
return ;
21.
}
22.
for(int i = 1 ; i < 10 ; i ++)
23.
{
24.
if(!visit[i])
25.
{
26.
visit[i] = true;
27.
num[index] = i;
28.
dfs(index+1);
29.
visit[i] = false;
30.
}
31.
}
32.
}
33.
34.
int main()
35.
{
36.
dfs(0);
37.
printf("%d\n",ans);
38.
return 0;
39.
}
第四题:
快速排序
排序在各种场合经常被用到。
快速排序是十分常用的高效率的算法.
其思想是:先选一个“标尺”,
用它把整个队列过一遍筛子,
以保证:其左边的元素都不大于它,其右边的元素都不小于它。
这样,排序问题就被分割为两个子区间。
再分别对子区间排序就可以了。
下面的代码是一种实现,请分析并填写划线部分缺少的代码。
#include <stdio.h>
void swap(int a[], int i, int j)
{
int t = a[i];
a[i] = a[j];
a[j] = t;
}
int partition(int a[], int p, int r)
{
int i = p;
int j = r + 1;
int x = a[p];
while(1){
while(i〈r && a[++i]<x);
while(a[——j]>x);
if(i>=j) break;
swap(a,i,j);
}
______________________;
return j;
}
void quicksort(int a[], int p, int r)
{
if(p〈r){
int q = partition(a,p,r);
quicksort(a,p,q—1);
quicksort(a,q+1,r);
}
}
int main()
{
int i;
int a[] = {5,13,6,24,2,8,19,27,6,12,1,17};
int N = 12;
quicksort(a, 0, N—1);
for(i=0; i〈N; i++) printf(”%d ”, a[i]);
printf("\n");
return 0;
}
注意:只填写缺少的内容,不要书写任何题面已有代码或说明性文字。
这个题目如果接触过快排,了解过快速排序的原理的应该是送分题目,只不过快排单步
(就是将一堆数按照某个数作为基准数分成左右两堆)这个实现方式有几种代码表现。在这里
答案是 swap(a,p,j)。
第五题:
抽签
X 星球要派出一个 5 人组成的观察团前往 W 星。
其中:
A 国最多可以派出 4 人。
剩余22页未读,继续阅读
资源评论
คิดถึง643
- 粉丝: 3908
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功