CSDN编程题-每日一练(2023-08-24)

CSDN编程题-每日一练(2023-08-24)

一、题目名称:计算公式

时间限制:1000ms内存限制:256M

题目描述:

给定整数n。 计算公式: n i-1

∑ ∑ [gcd(i + j, i - j) = 1]

i=1 j=1

输入描述:

输入整数n。(1<=n<=1e6)

输出描述:

输出答案

🚩 示例:

✔️ 示例1 :

输入

233

输出

11065

🔔 解题思路:

首先,我们需要明确计算公式的含义。公式中的i和j都是从1开始的,并且满足gcd(i + j, i - j) = 1。我们需要计算一个双重求和的公式。

代码如下:

python 复制代码
import math

def calc(n):
    result = 0
    
    for i in range(1, n+1):
        for k in range(1, (i//2) + 1):
            if math.gcd(i+k, i-k) == 1:
                result += 2
    
    return result

n = int(input())
print(calc(n))

二、题目名称:蛇形矩阵

时间限制:1000ms内存限制:256M

题目描述:

给你一个整数n,输出n∗n的蛇形矩阵。

输入描述:

输入一行,包含一个整数n

输出描述:

输出n行,每行包含n个正整数,通过空格分隔。

🚩示例:

✔️示例1

输入

4

输出

1 2 6 7

3 5 8 13

4 9 12 14

10 11 15 16

🔔 解题思路:

生成n∗n的蛇形矩阵。根据蛇形矩阵的生成规则,从左上角开始按照顺序填充矩阵。

代码1如下:

python 复制代码
n = int(input())

def snake_matrix(n):
##创建一个 n × n 的二维列表 arr ,并初始化所有元素为0。arr 表示蛇形矩阵
    arr = [[0] * n for _ in range(n)]
    num = 1  ##变量 num 表示当前要填入蛇形矩阵的数字,初始值为1
    row, col = 0, 0  ##变量 row 和 col 表示当前位置的行号和列号,初始值为0

##循环从 1 到 n × n 遍历每个数字,将其填入蛇形矩阵中
    for i in range(1, n*n+1):
    ##在每次循环中,首先将当前数字 num 填入蛇形矩阵的当前位置 (row, col)
        arr[row][col] = num
        ##然后将num加1
        num += 1
##根据当前位置 (row, col) 的行号与列号之和 (row + col) 的奇偶性,确定下一个位置的移动方向

##1、当 (row + col) 为偶数时,向右上方移动
        if (row + col) % 2 == 0: 
        ##具体判断条件为:
        ##如果当前列号 col 小于 n - 1 并且当前行号 row 大于0,则向右上方移动,即列号加1,行号减1
            if col < n - 1 and row > 0:
                col += 1
                row -= 1
##如果当前列号 col 小于 n - 1,但当前行号 row 已经达到最小值0,则只能向右移动,即列号加1
            elif col < n - 1:
                col += 1
##否则,当前列号 col 达到最大值 n - 1,只能向下移动,即行号加1
            else:
                row += 1

##2、当 (row + col) 为奇数时,向左下方移动
        else: 
  #如果当前行号 row 小于 n - 1 并且当前列号 col 大于0,则向左下方移动,即行号加1,列号减1
            if row < n - 1 and col > 0:
                row += 1
                col -= 1
##如果当前行号 row 小于 n - 1,但当前列号 col 已经达到最小值0,则只能向下移动,即行号加1
            elif row < n - 1:
                row += 1
###否则,当前行号 row 达到最大值 n - 1,只能向右移动,即列号加1
            else:
                col += 1
##遍历结束后,返回构造好的蛇形矩阵 arr
    return arr  

arr = snake_matrix(n)

##最后,按指定格式输出蛇形矩阵。遍历 arr 的每一行,并使用空格分隔每个数字,将其打印输出
for row in arr:
    print(' '.join(str(num) for num in row))

代码2如下:

python 复制代码
## n ---蛇形矩阵的大小
n = int(input())

def snake_matrix(n):
###创建一个 n × n 的二维列表 matrix,并初始化所有元素为 0。这个二维列表表示蛇形矩阵
    matrix = [[0] * n for _ in range(n)]
    num = 0 ##变量 num 表示当前要填入蛇形矩阵的数字,初始值为 0
    arr = []  ##空列表 arr,用于存储每一行的数字序列
##循环从 1 到 2n-1 遍历每一行,i 表示当前行号
    for i in range(1, n * 2):
        arr.append([])  #新增一个空列表,用于存储当前行的数字序列

##根据不同的行号 i,使用条件判断进行不同的遍历方式:
## 1、如果当前行号 i 小于等于 n,则遍历范围为 0 到 i-1,即列数与行号相同。在这个范围内,逐个填入数字,同时更新 num 的值,并将数字添加到 arr[-1] 中。

## 2、否则,当前行号 i 大于 n,则遍历范围为 0 到 2n-i-1,即列数等于 2n-1 减去行号 i。同样地,在这个范围内逐个填入数字,并进行相应的更新操作。
        if i <= n:
            for j in range(i):
                num += 1
                arr[-1].append(num)
        else:
            for j in range(2 * n - i):
                num += 1
                arr[-1].append(num)

##在每一行填充数字时,如果当前行号 i 是偶数(i % 2 == 0),说明该行需要进行反转操作(从高到低的顺序),所以将 arr[-1] 反转
        if i % 2 == 0:
            arr[-1] = arr[-1][::-1]


##使用两个嵌套的循环 for i in range(n) 和 for j in range(n),遍历矩阵的每个位置。并将 arr[j + i].pop() 的值赋给 matrix[i][j],用于填充蛇形矩阵。
    for i in range(n):
        for j in range(n):
            matrix[i][j] = arr[j + i].pop()

    return matrix


##函数返回生成的蛇形矩阵 matrix
matrix = snake_matrix(n)


##使用循环打印输出蛇形矩阵中的每一行,通过 ' '.join(str(num) for num in row) 将每个数字转换为字符串,并用空格连接起来,实现按行打印输出
for row in matrix:
    print(' '.join(str(num) for num in row))

🔔 题目变形1:
🚩示例:

✔️示例1

输入

4

输出

1 2 3 4

12 13 14 5

11 16 15 6

10 9 8 7

python 复制代码
def snake_matrix(n):
    matrix = [[0] * n for _ in range(n)]
    num = 1
    k = 0
    
    while k < n:
        i, j = k, k
        
        # 向右移动填充数字
        while j < n and matrix[i][j] == 0:
            matrix[i][j] = num
            num += 1
            j += 1
        
        j -= 1
        i += 1
        
        # 向下移动填充数字
        while i < n and matrix[i][j] == 0:
            matrix[i][j] = num
            num += 1
            i += 1
        
        i -= 1
        j -= 1
        
        # 向左移动填充数字
        while j >= 0 and matrix[i][j] == 0:
            matrix[i][j] = num
            num += 1
            j -= 1
        
        j += 1
        i -= 1
        
        # 向上移动填充数字
        while i >= 0 and matrix[i][j] == 0:
            matrix[i][j] = num
            num += 1
            i -= 1
        
        k += 1
    
    return matrix

n = int(input())
matrix = snake_matrix(n)

for row in matrix:
    print(' '.join(str(num) for num in row))

🔔 题目变形2:
🚩示例:

✔️示例1

输入

4

输出

1 8 9 16

2 7 10 15

3 6 11 14

4 5 12 13

python 复制代码
def snake_matrix(n):
    matrix = [[0] * n for _ in range(n)]
    num = 1

    for i in range(n):
        if i % 2 == 0:
            for j in range(n):
                matrix[j][i] = num
                num += 1
        else:
            for j in range(n-1, -1, -1):
                matrix[j][i] = num
                num += 1
    
    return matrix

n = int(input())
matrix = snake_matrix(n)

for row in matrix:
    print(' '.join(str(num) for num in row))

🔔 题目变形3:
🚩示例:

✔️示例1

输入

4

输出

1 2 3 4

8 7 6 5

9 10 11 12

16 15 14 13

python 复制代码
def snake_matrix(n):
    matrix = [[0] * n for _ in range(n)]
    num = 1
    
    for i in range(n):
        if i % 2 == 0:
            for j in range(n):
                matrix[i][j] = num
                num += 1
        else:
            for j in range(n-1, -1, -1):
                matrix[i][j] = num
                num += 1
    
    return matrix

n = int(input())
matrix = snake_matrix(n)

for row in matrix:
    print(' '.join(str(num) for num in row))

三、题目名称:小玉家的电费

时间限制:1000ms内存限制:256M

题目描述:

夏天到了,各家各户的用电量都增加了许多,相应的电费也交的更多了。小玉家今天收到了一份电费通知单。小玉看到上面写:据闽价电[2006]27号规定,月用电量在150千瓦时及以下部分按每千瓦时0.4463元执行,月用电量在151~400千瓦时的部分按每千瓦时0.4663元执行,月用电量在401千瓦时及以上部分按每千瓦时0.5663元执行;小玉想自己验证一下,电费通知单上应交电费的数目到底是否正确呢。请编写一个程序,已知用电总计,根据电价规定,计算出应交的电费应该是多少。

输入描述:

输入一个整数,表示用电总计(单位以千瓦时计),不超过10000。

输出描述:

输出一个数,保留到小数点后1位(单位以元计,保留到小数点后1位)。

🚩示例:

✔️示例1

输入

267

输出

121.5

🔔 解题思路:

根据输入的用电总计,按照规定的电价计算电费金额。

具体电费金额计算如下:

1、如果用电总计 <= 150,电费金额 = 用电总计 * 0.4463;

2、如果用电总计 > 150 且 <= 400,电费金额 = (150 * 0.4463) + ((用电总计 - 150) * 0.4663);

3、如果用电总计 > 400,电费金额 = (150 * 0.4463) + (250 * 0.4663) + ((用电总计 - 400) * 0.5663);

代码1如下:

python 复制代码
def calc(total_power):
    if total_power <= 150:
        return round(total_power * 0.4463, 1)
    elif total_power > 150 and total_power <= 400:
        return round((150 * 0.4463) + ((total_power - 150) * 0.4663), 1)
    else:
        return round((150 * 0.4463) + (250 * 0.4663) + ((total_power - 400) * 0.5663), 1)

total_power = int(input())
pay = calc(total_power)
print(pay)

代码2如下:

python 复制代码
#include <stdio.h>
#include <stdlib.h>
void solution(int total_power) {
double pay = 0;
  if (total_power <= 150) {
   pay = total_power * 0.4463;
 } 
  else if(total_power <= 400) {
   pay = 150 * 0.4463 + (total_power - 150) * 0.4663;
 } 
  else {
   pay = 150 * 0.4463 + 250 * 0.4663 + (total_power - 400) * 0.5663;
 }
 printf("%0.1f",pay);
}
int main() {
 int total_power;
 scanf("%d", &total_power);
 solution(total_power);
 return 0;
}

代码3如下:

python 复制代码
# 请关闭中文输入法,用英文的字母和标点符号。
# 如果你想运行系统测试用例,请点击【执行代码】按钮,如果你想提交作答结果,请点击【提交】按钮,
# 注意:除答案外,请不要打印其他任何多余的字符,以免影响结果验证
# 本OJ系统是基于 OxCoder 技术开发,网址:www.oxcoder.com
# 模版代码提供基本的输入输出框架,可按个人代码习惯修改


class Solution:
    def __init__(self) -> None:
        pass

    def solution(self, amount):
        result = None

        # TODO: 请在此编写代码
        if amount <=150:
            result=amount*0.4463
        elif  amount <=400 and amount>150:
            result=150*.4463+(amount-150)*0.4663
        elif amount>400:
            result = 150 * .4463 + (400 - 150) * 0.4663+(amount-400)*0.5663
        return round(result, 1)


if __name__ == "__main__":
    amount = int(input().strip())
    sol = Solution()
    result = sol.solution(amount)

    print(result)
相关推荐
ZZZ_O^O23 分钟前
二分查找算法——寻找旋转排序数组中的最小值&点名
数据结构·c++·学习·算法·二叉树
CV-King1 小时前
opencv实战项目(三十):使用傅里叶变换进行图像边缘检测
人工智能·opencv·算法·计算机视觉
代码雕刻家1 小时前
数据结构-3.9.栈在递归中的应用
c语言·数据结构·算法
雨中rain1 小时前
算法 | 位运算(哈希思想)
算法
FreakStudio2 小时前
全网最适合入门的面向对象编程教程:56 Python字符串与序列化-正则表达式和re模块应用
python·单片机·嵌入式·面向对象·电子diy
丶21362 小时前
【CUDA】【PyTorch】安装 PyTorch 与 CUDA 11.7 的详细步骤
人工智能·pytorch·python
Kalika0-03 小时前
猴子吃桃-C语言
c语言·开发语言·数据结构·算法
_.Switch3 小时前
Python Web 应用中的 API 网关集成与优化
开发语言·前端·后端·python·架构·log4j
代码雕刻家3 小时前
课设实验-数据结构-单链表-文教文化用品品牌
c语言·开发语言·数据结构
一个闪现必杀技3 小时前
Python入门--函数
开发语言·python·青少年编程·pycharm