答案都是自己理解的
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号北大决赛,也算公费旅游)