蓝桥杯第7届省赛c语言c组试题及答案,2016第七届蓝桥杯省赛C组试题及部分答案...

答案都是自己理解的

1.报纸页数

X

星球日报和我们地球的城市早报是一样的,

都是一些单独的纸张叠在一起而已。每张纸印有

4

版。

比如,某张报纸包含的

4

页是:

5,6,11,12

可以确定它应该是最上边的第

2

张报纸。

我们在太空中捡到了一张

X

星球的报纸,

4

个页码分别是:

1125,1126,1727,1728

请你计算这份报纸一共多少页(也就是最大页码

,

并不是用了几张纸哦)?

请填写表示总页数的数字。

注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

/************************************************************************/

/* 报纸页数

* 写完之后用例题数据测了下就提交了

*/

/************************************************************************/

#include

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

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

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

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

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=99,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

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[n]);

return 0;

}

PS 自从工作之后,几乎没个人时间,这个博客也有半年没更新了。我想我必须每天都学习新的知识了!(28号北大决赛,也算公费旅游)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值