修建灌木&&顺子日期
Posted pepsi_w
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了修建灌木&&顺子日期相关的知识,希望对你有一定的参考价值。
题目
有 N 棵灌木整齐的从左到右排成一排。爱丽丝在每天傍晩会修剪一棵灌 木, 让灌木的高度变为 0 厘米。爱丽丝修剪灌木的顺序是从最左侧的灌木开始, 每天向右修剪一棵灌木。当修剪了最右侧的灌木后, 她会调转方向, 下一天开 始向左修剪灌木。直到修剪了最左的灌木后再次调转方向。然后如此循环往复。
灌木每天从早上到傍晩会长高 1 厘米, 而其余时间不会长高。在第一天的 早晨, 所有灌木的高度都是 0 厘米。爱丽丝想知道每棵灌木最高长到多高。
输入格式
一个正整数 N, 含义如题面所述。
输出格式
输出 N 行, 每行一个整数, 第 i 行表示从左到右第 i 棵树最高能长到多高。
思路
自己画了一下,n=3的时候我画出来是3 1 3,也就是比题目少一,不知道是不是我画错了(我知道了!因为我把要修剪的那棵树修剪当天的高度没计算 )。n = 4的时候就发现规律了,序号为i的高度= 2n- 2*i 且呈对称相等。也就是说分两种情况,N分别为奇偶数时。
代码
import os
import sys
# 请在此输入您的代码
n = int(input())
h1 = []
h = []
for i in range(1, n//2 + 1): # 由于是对称的 因此只计算前半部分
h1.append(2*n-2*i)
if n % 2 == 0: # 偶数棵
h = h1[:] # 深复制
h1.reverse() # 逆序后进行拼接
h = h + h1
else:
h1.append(2*n-2*(n//2 + 1))
h = h1[:] # h = h1 为浅复制 共享同一内存 后面对h1逆序排列
#h也会改变 因此这里使用切片的方法进行深复制 注意切片方法只能对第一层进行深复制 即如果存在列表中的列表还是共享的同一内存
h1.reverse()
h = h + h1[1:]
for i in h:
print(i)
Tips
最开始直接使用h = h1,结果老是不对,后面才发现是因为list的深复制浅复制的原因。
直接赋值给h1 实际两个变量使用的是同一内存, 对h1进行reverse的时候,h也会改变。
使用[:]切片的方式进行复制,第一层的list是深复制。
题目
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小明特别喜欢顺子。顺子指的就是连续的三个数字:123、456 等。顺子日期指的就是在日期的 yyyymmdd 表示法中,存在任意连续的三位数是一个顺子的日期。
例如 20220123 就是一个顺子日期,因为它出现了一个顺子:123; 而 20221023 则不是一个顺子日期,它一个顺子也没有。
小明想知道在整个 2022 年份中,一共有多少个顺子日期?
思路
暴力解题,使用datetime这个库中的timedelta函数,进行日期加,对每个日期中是否存在顺子进行判断。
代码
import os
import sys
import datetime
# 请在此输入您的代码
start = datetime.date(2022, 1, 1)
end = datetime.date(2023, 1, 1)
count = 0
def is_shun(date):
day=str(date).replace('-','')#将日期中的-去掉
for i in range(6):
if int(day[i]) == int(day[i+1]) - 1 and int(day[i+1]) == int(day[i+2]) - 1:
return True
return False
while start != end:
if is_shun(start):
count += 1
start += datetime.timedelta(days = 1)
print(count)
如何用c语言编程,判断一个三位数是不是为顺子(不是顺子直接提示出错)?
#include<stdio.h>
int main()
int n,a,b,c;
scanf("%d",&n);
a=n%10;//个位
b=n%100/10;//十位
c=n/100;//百位
if((a+2==b+1&&b+1==c)||(a==b+1&&b+1==c+2))
printf("该数是顺子");
else
printf("输入错误");
return 0;
希望能帮到你,望采纳;
参考技术A #include<stdio.h>#include<math.h>//使用绝对值函数必须要引入math.h
int calc(int num)
int temp[3],i=0;
while(num!=0)//将三位数从个位开始取,依次存放在数组temp中
temp[i]=num%10;
num/=10;
i++;
//abs就是C语言求绝对值的数,顺子满足前面一个数减去后面一个数的差的绝对值等于1,并且满足第一位数减去第三位数的绝对值等于2,如果是顺子,该函数返回1,如果不是顺子该函数返回0
if(abs(temp[0]-temp[1])==1&&abs(temp[1]-temp[2])==1&&abs(temp[0]-temp[2])==2)
return 1;
return 0;
void main()
int num;
printf("请输入一个三位数:"); //提示并输入三位数
scanf("%d",&num);
while(num<100||num>999) //假如输入的不是三位数,提示重新输入
printf("你输入的不是一个三位数,请重新输入!\n\n");
printf("请输入一个三位数:");
scanf("%d",&num);
if(calc(num)==1)
printf("顺子!");
else
printf("输入错误!");
printf("\n");
参考技术B 用if语句判断吧,满足a<b<c就是顺子,否则不是。C语言表达为if(a <b && b < c) printf("顺子");
以上是关于修建灌木&&顺子日期的主要内容,如果未能解决你的问题,请参考以下文章
如何用c语言编程,判断一个三位数是不是为顺子(不是顺子直接提示出错)?
2022&2023华为OD机试 - 斗地主 2(Python)