直接枚举摆放多少行的地砖,由于最好是上下和左右都联通,所以优先摆放为矩形是最优的,多出来的可以摆放到最后一列又或者最后一行。
然后求这个摆放有多少的圆即可,最后取最大值。
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
说明
