直接枚举摆放多少行的地砖,由于最好是上下和左右都联通,所以优先摆放为矩形是最优的,多出来的可以摆放到最后一列又或者最后一行。
然后求这个摆放有多少的圆即可,最后取最大值。
Python
n = int(input())
ans = n - 1
for i in range(1, n + 1):
    j = n // i
    k = n % i
    if k > 0:
        k = 2 * k - 1
    ans = max(ans, (i - 1) * j + (j - 1) * i + k)
print(ans)
import java.io.*;
import java.util.*;
public class Main {
    public static String line;
    public static String[] parts;
    public static long res = 0;
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        StreamTokenizer in = new StreamTokenizer(bf);
        PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
        int n = Integer.valueOf(bf.readLine());
        int res = n - 1;
        for(int i = 2; i <= n; i++){
            int j = n / i;
            int rest = n % i;
            if(rest > 0){
                res = Math.max(res, (i - 1) * j + (j - 1) * i + 2 * rest - 1);
            }else{
                res = Math.max(res, (i - 1) * j + (j - 1) * i);
            }
        }
        out.println(res);
        out.flush();
    }
}
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main() {
    int n = 0;
    cin >> n;
    int ans = n - 1;
    for (int i = 2; i < n; ++ i) {
        int j = n / i;
        int k = n % i;
        ans = max(ans, k + k - 1 + (i - 1) * j + (j - 1) * i);
    }
    cout << ans << endl;
    return 0;
}
会员可通过查看《已通过》的提交记录来查看其他语言哦~
 小红家里打算铺地砖,他一共准备了n块如图所示的正方形地砖,每一块由4个半径一致的半圆组成。
现在小红想要使得铺完后的地砖产生的圆最多。请你以任意方式的摆放后,帮他找到全部可行的摆放方式中,拼出的圆的数量最多的一种。直接输出的圆的数量。

在一行上输入一个整数n(1≤n≤106)表示地砖的数量。
在一行上输出一个整数n(1≤n≤106)代表全部可行的摆放方式中,拼出的圆的数量最多的一种的圆的数量。
输入
3
输出
2
说明

输入
4
输出
4
说明
