持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第14天,点击查看活动详情
马虎的算式
题目描述
小明是个急性子,上小学的时候经常把老师写在黑板上的题目抄错了。
有一次,老师出的题目是:36 x 495 = ?36x495=?
他却给抄成了:396 x 45 = ?396x45=?
但结果却很戏剧性,他的答案竟然是对的!!
因为 36 * 495 = 396 * 45 = 1782036∗495=396∗45=17820。
类似这样的巧合情况可能还有很多,比如:27 * 594 = 297 * 5427∗594=297∗54。
假设 a\ b\ c\ d\ ea b c d e 代表 11 ~ 99 不同的 55 个数字(注意是各不相同的数字,且不含 00 )
能满足形如: ab * cde = adb * ceab∗cde=adb∗ce 这样的算式一共有多少种呢?
请你利用计算机的优势寻找所有的可能,并回答不同算式的种类数。
满足乘法交换律的算式计为不同的种类,所以答案肯定是个偶数。
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
代码
#include <iostream>
using namespace std;
int main()
{
int ans = 0;
for(int a = 1; a < 10;a ++){
for(int b =1;b < 10;b ++){
if(a != b){
for(int c = 1; c < 10;c++){
if(c != a && c != b){
for(int d = 1;d < 10 ;d++){
if(d != a && d != c && d != b ){
for(int e = 1; e < 10 ;e ++){
if(e != a &&e != b && e != c && e != d){
if((a*10 + b) * (c*100 + d * 10 + e) == (a *100 + d*10 + b) *(c*10 +e))
ans++;
}
}
}
}
}
}
}
}
}
cout<<ans;
}
思路
枚举比较简单不说了
跑步锻炼
题目描述
小蓝每天都锻炼身体。
正常情况下,小蓝每天跑 11 千米。如果某天是周一或者月初(11 日),为了激励自己,小蓝要跑 22 千米。如果同时是周一或月初,小蓝也是跑 22 千米。
小蓝跑步已经坚持了很长时间,从 20002000 年 11 月 11 日周六(含)到 20202020 年 1010 月 11 日周四(含)。请问这段时间小蓝总共跑步多少千米?
代码
#include <iostream>
using namespace std;
long long sum = 0;
bool isleap(int y){
return (y%4==0 &&y%100!=0) || (y%400 == 0);
}
int main()
{
// 请在此输入您的代码
int y = 2000,m = 1,d = 1,s = 6;
while(!(y == 2020 && m == 1 && d == 1)){
if(d == 1 || s%7 == 6 )
{
sum += 2;
}
else sum += 1;
s++;
if(m == 12 && d == 32){
y ++;
m = 1;
d = 1;
}
else if((m == 1 ||m == 3 || m== 5||m == 7|| m == 8 || m ==10) && (d == 32)){
m++;
d = 1;
}
else if(m == 2&&isleap(y) && d == 30){
m ++;
d = 1;
}
else if(m == 2&&!isleap(y) && d == 29){
m ++;
d = 1;
}
else if((m == 4 || m == 6 || m == 9 || m == 11) && d == 31){
m++;
d = 1;
}
else d++;
}
cout<<sum;
return 0;
}
思路
这题我最开始的时候,while() 条件判断失误,我把条件写成 while(y!= 2020 && m != 1 && d != 1)
第39阶台阶
题目描述
小明刚刚看完电影《第 3939 级台阶》,离开电影院的时候,他数了数礼堂前的台阶数,恰好是 3939 级!
站在台阶前,他突然又想着一个问题:
如果我每一步只能迈上 11 个或 22 个台阶。先迈左脚,然后左右交替,最后一步是迈右脚,也就是说一共要走偶数步。那么,上完 3939 级台阶,有多少种不同的上法呢?
请你利用计算机的优势,帮助小明寻找答案。
代码
#include <iostream>
using namespace std;
int ans ; //方法数
void f (int n, int step ) // n 为剩余的阶梯数,step 为已走的步数
{
if(n < 0)
return;
if(n == 0 && step % 2 ==0) ans ++;
f(n - 1,step + 1); // 每次走一个阶梯,一次走一步
f(n - 2 ,step + 1); // 每次走俩个阶梯, 一次走一步
}
int main()
{
f(39,0);
cout<<ans<<endl;
return 0;
}
思路
如果不告诉你,这个需要偶数步,只告诉你一次走俩步或者一步,那么该如何走呢? 很简单就是
f(n =39){
return f (n - 1) + f(n - 2)
}