小明特别喜欢顺子。顺子指的就是连续的三个数字:123、456 等。顺子日期指的就是在日期的 yyyymmdd 表示法中,存在任意连续的三位数是一个顺子的日期。例如 20220123 就是一个顺子日期,因为它出现了一个顺子:123; 而 20221023 则不是一个顺子日期,它一个顺子也没有。小明想知道在整个 2022 年份中,一共有多少个顺子日期? python方法:
from datetime import *
# 日期转换为字符串,判断是否为顺子日期
dt = datetime(2022,1,1)
count = 0
for i in range(0,365):
s="%02d%02d%02d" %(dt.year,dt.month,dt.day)
dt += timedelta(days=1)
if '012' in s or '123' in s or '234' in s or '345' in s \
or '456' in s or '678' in s or '789' in s:
count = count+1
print(count)
C语言方法:
#include <stdio.h>
#include <stdlib.h>
int main(){
// 定义总数,月份,日期,每月的天数
int count,month,day,dcnt;
// 对月份进行循环
for(month=1;month<=12;month++){
// 如果该月为2月,则天数为28
if(month==2){
dcnt=28;
}
// 如果该月为1,3,5,7,8,10,12,则天数为31
if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12){
dcnt=31;
}
// 如果该月为4,6,9,11,则天数为30
if(month==4 || month==6 || month==9 || month==11){
dcnt=30;
}
//对天数进行循环,month/10是十位数,month%10是个位数,day/10是十位数,day%10是个位数
//如果两个差值是1,也就是后一个数比前一个数大1,则为顺子日期。
//这里分为两种情况。
for(day=1;day<=dcnt;day++){
if((month/10==(month%10)-1 && month%10==(day/10)-1) || (month%10==(day/10)-1 && day/10==(day%10)-1)){
count++;
}
}
}
printf("%d",count);
return 0;
}
2022 年 2 月 22 日 22:20 是一个很有意义的时间, 年份为 2022 , 由 3 个 2 和 1 个 0 组成, 如果将月和日写成 4 位, 为 0222 , 也是由 3 个 2 和 1 个 0 组 成, 如果将时间中的时和分写成 4 位, 还是由 3 个 2 和 1 个 0 组成。
小蓝对这样的时间很感兴趣, 他还找到了其它类似的例子, 比如 111 年 10 月 11 日 01:11,2202 年 2 月 22 日 22:02 等等。
请问, 总共有多少个时间是这种年份写成 4 位、月日写成 4 位、时间写成 4 位
后由 3 个一种数字和 1 个另一种数字组成
。注意 1111 年 11 月 11 日 11:11 不算,因为它里面没有两种数字。
#include<stdio.h>
int main()
{
int a = 0;
// 枚举两个数可能相等的所有可能
for (int i = 0; i <= 9; i++) //出现一次的数字 i
{
for (int j = 0; j <= 9; j++) //出现三次的数字 j
{
if (i == j)
{
continue; //如果相等,则跳出此次循环,继续下一次循环,也就是把这个数不要了
}
int num[4];
int b = 0, c = 0;
for (int d = 0; d < 4; d++) //出现一次的数字出现的位置
{
for (int e = 0; e < 4; e++)
{
if (e == d)
{
num[e] = i;
}
else {
num[e] = j;
}
}
int sum = num[3] * 1000 + num[2] * 100 + num[1] * 10 + num[0];
int f = sum / 100, g = sum % 100;
if (f >= 1 && f <= 12 && g >= 1 && g <= 30) //筛选月日
{
b++;
}
if (f >= 0 && f <= 23 && g >= 0 && g <= 59) //筛选时分
{
c++;
}
}
a = a + 4 * b * c;
}
}
printf("%d", a);
return 0;
}
如下的 10 行数据,每行有 10 个整数,请你求出它们的乘积的末尾有多少个零?
5650 4542 3554 473 946 4114 3871 9073 90 4329
2758 7949 6113 5659 5245 7432 3051 4434 6704 3594
9937 1173 6866 3397 4759 7557 3070 2287 1453 9899
1486 5722 3135 1170 4014 5510 5120 729 2880 9019
2049 698 4582 4346 4427 646 9742 7340 1230 7683
5693 7015 6887 7381 4172 4341 2909 2027 7355 5649
6701 6645 1671 5978 2704 9926 295 3125 3878 6785
2066 4247 4800 1578 6652 4616 1113 6205 3264 2915
3966 5291 2904 1285 2193 1428 2265 8730 9436 7074
689 5510 8243 6114 337 4096 8199 7313 3685 211
思路: 10=2*5,所以统计乘积中有多少个2和5的因子,所以有多少个5就有多少个0,统计5的个数就可以得到末尾0的个数。
#include <stdio.h>
#include <stdlib.h>
int main(){
int cnt = 0;//总数
for(int i=0;i<100;++i){
int x;
scanf("%d\n",&x); //输入100个数字
while(x%5==0){
cnt++;
x = x/5;
}
}
printf("%d\n",cnt);
return 0;
}
以上就是今天的学习内容啦~ 咱们下期再见~