NowCoder--被打脸的潇洒哥

探讨了平面上n个圆两两相交后,如何将平面划分成最多的区域。通过数学规律找到解决方法,给出了AC代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目 链接:https://ac.nowcoder.com/acm/contest/318/M

“画个圈圈诅咒你!”
在一次青青草原ACM个人赛中,潇洒哥被喜洋洋以30s罚时压制,委屈的当了个第二。潇洒哥蹲在角落说出了他的口头禅,并画起了圈圈。
突然,他想出了一个有趣的题目,跑去给喜洋洋做。喜洋洋看到题目后懵逼了,但是看到潇洒哥脸上欠揍的笑容就不爽,暗想一定要做出来狠狠的打潇洒哥的脸。
于是,他以上厕所为名义跑出来用手机把题目发给了你,希望你能帮你做出来让他可以嘲讽潇洒哥。
你收到的题目如下:
平面上有n个圆,求使这n个圆两两相交(即每两个圆之间恰好有两个交点)后最多能把平面划分成多少个区域。

输入描述
一个正整数t,表示有t(1≤t≤100)组数据。
接下来t行,每行一个整数n(0≤n≤1000),代表平面内圆的个数。
输出描述
输出共t行。每行一个正整数,表示对应的n个圆将该平面划分成的最大的区域数。
示例1
输入
3
1
2
3
输出
2
4
8
说明

第一个样例,平面只有一个圆,此时将平面划分成圆内和圆外两个区域;
第二个样例,平面上有两个圆,两圆相交可以将平面划分成四个区域(见下图)。

在这里插入图片描述

找规律:
n=1,s=1
n=2,s=4
n=3,s=8
n=4,s=14
发现当n>=1时,s=(n^2-n+2)
AC-Code
import java.util.Scanner;

public class ChShaM {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int t = sc.nextInt();
		while(t-->0)
		{
			long a = sc.nextInt();
			if(a==0)
			{
				System.out.println(1);
			}
			else
			{
				System.out.println(a*a-a+2);
			}
		}
		sc.close();
	}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值