1、开灯
## 题目描述
在一条无限长的路上,有一排无限长的路灯,编号为 $1,2,3,4,\dots$。
每一盏灯只有两种可能的状态,开或者关。如果按一下某一盏灯的开关,那么这盏灯的状态将发生改变。如果原来是开,将变成关。如果原来是关,将变成开。
在刚开始的时候,所有的灯都是关的。小明每次可以进行如下的操作:
指定两个数,$a,t$($a$ 为实数,$t$ 为正整数)。将编号为 $\lfloor a\rfloor,\lfloor 2 \times a\rfloor,\lfloor3 \times a\rfloor,\dots,\lfloor t \times a\rfloor$ 的灯的开关各按一次。其中 $\lfloor k \rfloor$ 表示实数 $k$ 的整数部分。
在小明进行了 $n$ 次操作后,小明突然发现,这个时候只有一盏灯是开的,小明很想知道这盏灯的编号,可是这盏灯离小明太远了,小明看不清编号是多少。
幸好,小明还记得之前的 $n$ 次操作。于是小明找到了你,你能帮他计算出这盏开着的灯的编号吗?
## 输入格式
第一行一个正整数 $n$,表示 $n$ 次操作。
接下来有 $n$ 行,每行两个数,$a_i,t_i$。其中 $a_i$ 是实数,小数点后一定有 $6$ 位,$t_i$ 是正整数。
## 输出格式
仅一个正整数,那盏开着的灯的编号。
## 样例 #1
### 样例输入 #1
```
3
1.618034 13
2.618034 7
1.000000 21
```
### 样例输出 #1
```
20
```
## 提示
记 $T=\sum \limits_{i=1}^n = t_1+t_2+t_3+\dots+t_n$。
对于 $30\%$ 的数据,满足 $T \le 1000$;
对于 $80\%$ 的数据,满足 $T \le 200000$;
对于 $100\%$ 的数据,满足 $T \le 2000000$;
对于 $100\%$ 的数据,满足 $n \le 5000,1 \le a_i<1000,1 \le t_i \le T$。
数据保证,在经过 $n$ 次操作后,有且只有一盏灯是开的,不必判错。而且对于所有的 $i$ 来说,$t_i\times a_i$ 的最大值不超过 $2000000$。
题解思路:利用列表标记灯开关,开为1,关为0
n=int(input())
x=[0 for i in range(2000005)]
for j in range(n):
a,t=map(float,input().split())
for i in range(1,int(t+1)):
if x[int(a*i)]==0:
x[int(a*i)]=1
else:x[int(a*i)]=0
for i in range(1,2000005):
if x[i]==1:
print(i)
break
2、 【深基5.习6】蛇形方阵
## 题目描述
给出一个不大于 $9$ 的正整数 $n$,输出 $n\times n$
的蛇形方阵。
从左上角填上 $1$ 开始,顺时针方向依次填入数字,如同样例所示。注意每个数字有都会占用 $3$ 个字符,前面使用空格补齐。
## 输入格式
输入一个正整数 $n$,含义如题所述。
## 输出格式
输出符合题目要求的蛇形矩阵。
## 样例 #1
### 样例输入 #1
```
4
```
### 样例输出 #1
```
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
```
## 提示
数据保证,$1 \leq n \leq 9$。
题解思路:找出行走的规律一共四种走法(贪吃蛇走法):行+-1,列不变;列+-1,行不变。
把输出整体看成一维矩阵!
n=int(input())
a=[[0 for i in range(15)]for i in range(15)]
pos=[[0,1],[1,0],[0,-1],[-1,0]]#走法
x=1
y=1
d=0
for i in range(1,n*n+1):
a[x][y]=i
tx=x+pos[d][0]
ty=y+pos[d][1]#当前规则的下一步
#下一步需要转向的五种情况(下一步碰到四个边或者有数)
if tx<1 or tx>n or ty<1 or ty>n or a[tx][ty]:
d=(d+1)%4
x+=pos[d][0]
y+=pos[d][1]
for i in range(1,n+1):
for j in range(1,n+1):
''' 输出 法1,用+进行字符串拼接
if a[i][j]<10:
print(" "+str(a[i][j]),end='') #一位数要加两空格
else:
print(" "+str(a[i][j]),end='')#两位数加一空格
print()
'''
#法2:利用str.format()填充
a[i][j]='{:>3}'.format(a[i][j])
print(a[i][j],end='')
print()
注:字符串填充的两种方法,推荐法2