蓝桥刷题——数组

1、旗鼓相当的对手

## 题目描述

现有 $N$ 名同学参加了期末考试,并且获得了每名同学的信息:语文、数学、英语成绩(均为不超过 $150$ 的自然数)。如果某对学生 $\text{<}i,j\text{>}$ 的每一科成绩的分差都不大于 $5$,且总分分差不大于 $10$,那么这对学生就是“旗鼓相当的对手”。现在想知道这些同学中,有几对“旗鼓相当的对手”?同样一个人可能会和其他好几名同学结对。

## 输入格式

第一行一个正整数 $N$。

接下来 $N$ 行,每行三个整数,其中第 $i$ 行表示第 $i$ 名同学的语文、数学、英语成绩。最先读入的同学编号为 $1$。

## 输出格式

输出一个整数,表示“旗鼓相当的对手”的对数。

## 样例 #1

### 样例输入 #1

```

3

90 90 90

85 95 90

80 100 91

```

### 样例输出 #1

```

2

```

## 提示

数据保证,$2 \le N\le 1000$ 且每科成绩为不超过 $150$ 的自然数。

题解:

N=int(input())
a=[[0,0,0] for i in range(1001)] #三位数组生成
cnt=0
for i in range(N):
    a[i]=list(map(int,input().split()))
for i in range(0,N-1):
    for j in range(i+1,N):
        if abs(a[i][0]-a[j][0])<=5 and\
           abs(a[i][1]-a[j][1])<=5 and\
           abs(a[i][2]-a[j][2])<=5 and\
           abs(a[i][0]+a[i][1]+a[i][2]-(a[j][0]+a[j][1]+a[j][2]))<=10:
            cnt+=1
print(cnt)
    

    

注:代码书写换行\

2、【深基5.例7】工艺品制作

## 题目描述

现有一个长宽高分别为 $w,x,h$ 组成的实心玻璃立方体,可以认为是由 $1\times1\times1$ 的数个小方块组成的,每个小方块都有一个坐标 $ ( i,j,k ) $。现在需要进行 $q$ 次切割。每次切割给出 $(x_1,y_1,z_1),(x_2,y_2,z_2)$ 这 6 个参数,保证 $x_1\le x_2$,$y_1\le y_2$,$z_1\le z_2$;每次切割时,使用激光工具切出一个立方体空洞,空洞的壁平行于立方体的面,空洞的对角点就是给出的切割参数的两个点。

换句话说,所有满足 $x_1\le i\le x_2$,$y_1\le j \le y_2 $,$z_1\le k\le z_2$ 的小方块 $(i,j,k)$ 的点都会被激光蒸发。例如有一个 $4\times4\times 4$ 的大方块,其体积为 $64$;给出参数 $(1,1,1),(2,2,2)$ 时,中间的 $8$ 块小方块就会被蒸发,剩下 $56$ 个小方块。现在想知道经过所有切割操作后,剩下的工艺品还剩下多少格小方块的体积?

## 输入格式

第一行三个正整数 $w,x,h$。

第二行一个正整数 $q$。

接下来 $q$ 行,每行六个整数 $(x_1,y_1,z_1),(x_2,y_2,z_2)$。

## 输出格式

输出一个整数表示答案。

## 样例 #1

### 样例输入 #1

```

4 4 4

1

1 1 1 2 2 2

```

### 样例输出 #1

```

56

```

## 提示

数据保证,$1\le w,x,h\le 20$,$1 \leq q\le 100$。$1 \leq x_1 \leq x_2 \leq w$,$1 \leq y_1\leq y_2 \leq x$,$1 \leq z_1 \leq z_2 \leq h$。

题解

w,x,h=map(int,input().split())
a=[[[0 for i in range(25)]for i in range(25)]for i in range(25)]
for i in range(w): 
    for j in range(x):
        for k in range(h):
            a[i][j][k]=1
            
##a = []
##for i in range(w):
##    a.append([])
##    for j in range(x):
##        a[i].append([])
##        for k in range(h):
##            a[i][j].append(1)
q=int(input())
while q>0:
    x1,y1,z1,x2,y2,z2=map(int,input().split())
    x1 -= 1
    x2 -= 1
    y1 -= 1
    y2 -= 1
    z1 -= 1
    z2 -= 1
    for i in range(x1,x2+1):
        for j in range(y1,y2+1):
            for k in range(z1,z2+1):
                a[i][j][k]=0
    q-=1
sum=0
for i in range(w):
    for j in range(x):
        for k in range(h):
            if a[i][j][k]==1:
                sum+=1
print(sum)

注:

  1. x1x2等索引要-1因为从0开始赋值。

  1. 三维数组的赋值两种方法

  1. 也是砍树种树问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值