棋盘落子

该博客探讨了如何计算一个N行M列棋盘在每行每列至少有一个棋子时的期望放棋子次数。给出了输入输出格式,并提供了一组输入样例及其对应的输出样例。
摘要由CSDN通过智能技术生成

现在有一个N行M列的棋盘,每次只能在一个位置放一个棋子,那么当棋盘的所有行所有列都有棋子的时候期望的放下棋子的次数是多少?

输入格式:
第一行有一个正整数K表示棋盘的个数,随后的K行,每行有2个整数,分别表示棋盘的行数N和列数M。

输出格式:
输出K行,每行表示一个棋盘的期望次数。

输入样例:
在这里给出一组输入。例如:

2
1 3
2 2

输出样例:
在这里给出相应的输出。例如:

3.0000000000
2.6666666667
#include <bits/stdc++.h>
using namespace std;

#define db double
#define N 60
db f[N][N][N * N];

int main()
{
   
	int T; 
	cin >> T;
	while (T--)
	{
   
		int n, m; scanf("%d%d", &n, &m
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
你可以使用Python的GUI库(如Tkinter)创建一个窗口,然后在窗口中绘制棋盘。当鼠标左键被按下时,你可以在鼠标点击的位置绘制一个棋子;当鼠标右键被按下时,你可以在鼠标点击的位置绘制一个棋子。以下是一个简单的示例代码: ```python import tkinter as tk # 棋盘大小 BOARD_SIZE = 19 # 棋子大小 STONE_SIZE = 20 class Board(tk.Canvas): def __init__(self, master=None, **kwargs): tk.Canvas.__init__(self, master, **kwargs) self.master = master self.stones = [[None] * BOARD_SIZE for i in range(BOARD_SIZE)] self.bind("<Button-1>", self.place_black_stone) self.bind("<Button-3>", self.place_white_stone) def draw_board(self): for i in range(BOARD_SIZE): x0, y0, x1, y1 = self.get_cross_point(i, 0), self.get_cross_point(i, BOARD_SIZE - 1) self.create_line(x0, y0, x1, y1) x0, y0, x1, y1 = self.get_cross_point(0, i), self.get_cross_point(BOARD_SIZE - 1, i) self.create_line(x0, y0, x1, y1) for i in [3, 9, 15]: for j in [3, 9, 15]: x, y = self.get_cross_point(i, j) self.create_oval(x - 2, y - 2, x + 2, y + 2, fill="black") def get_cross_point(self, i, j): x = (i + 1) * self.master.winfo_width() // (BOARD_SIZE + 1) y = (j + 1) * self.master.winfo_height() // (BOARD_SIZE + 1) return x, y def place_black_stone(self, event): i, j = self.get_clicked_cross_point(event) if self.stones[i][j] is None: x, y = self.get_cross_point(i, j) self.create_oval(x - STONE_SIZE, y - STONE_SIZE, x + STONE_SIZE, y + STONE_SIZE, fill="black") self.stones[i][j] = "black" def place_white_stone(self, event): i, j = self.get_clicked_cross_point(event) if self.stones[i][j] is None: x, y = self.get_cross_point(i, j) self.create_oval(x - STONE_SIZE, y - STONE_SIZE, x + STONE_SIZE, y + STONE_SIZE, fill="white") self.stones[i][j] = "white" def get_clicked_cross_point(self, event): x, y = event.x, event.y i = round(x / self.master.winfo_width() * (BOARD_SIZE - 1)) j = round(y / self.master.winfo_height() * (BOARD_SIZE - 1)) return i, j if __name__ == "__main__": root = tk.Tk() board = Board(root, width=400, height=400) board.draw_board() board.pack() root.mainloop() ``` 这个示例代码使用了Tkinter库创建了一个窗口,并在窗口中绘制了一个大小为19的棋盘。当鼠标左键被按下时,会在鼠标点击的位置绘制一个棋子;当鼠标右键被按下时,会在鼠标点击的位置绘制一个棋子。你可以根据自己的需要修改代码来实现更复杂的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

全能战士s

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值