zoukankan      html  css  js  c++  java
  • 被打脸的潇洒哥(推递推式)

    链接: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

    说明

    第一个样例,平面只有一个圆,此时将平面划分成圆内和圆外两个区域;
    

    第二个样例,平面上有两个圆,两圆相交可以将平面划分成四个区域(见下图)。

     题解:我是根据交点来推的,1个圆为0个交点,2个圆为2个交点,3个圆为6个。。。。。然后就可以推出来每次在原来的基础上多了(n-1)*2个交点,也就是多了这么多的交点,这个题的坑点在于0,一开始的提交没考虑到0个圆,第二次想错了,以为0个的时候平面是0,其他基本很简单

    代码:

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<iostream>
    
    using namespace std;
    
    int main()
    {
    	
    	long long int sum[1005]={0};
    	sum[0]=1;
    	sum[1]=2;
    	for(int t=2;t<=1000;t++)
    	{
    		sum[t]=sum[t-1]+(t-1)*2;
    	}
    	int T;
    	cin>>T;
    	//int a[105];
    	for(int t=0;t<T;t++)
    	{
    		int n;
    		scanf("%d",&n);
    		printf("%lld
    ",sum[n]);
    		
    	}
    	
    	return 0;
    }
  • 相关阅读:
    自定义异常
    java代码中正则表达式
    mybatis中代码如何实现批量添加
    List集合的三种遍历方式的效率问题
    4种方式配置不同作用域的jvm的堆栈内存!
    如何在Eclipse里修改端口
    如何用Eclipse打jar包
    用explain来解析sql语句,然后建立正确的索引
    quartz简单demo,教你最快使用quartz
    log4j.properties配置详解
  • 原文地址:https://www.cnblogs.com/Staceyacm/p/10781870.html
Copyright © 2011-2022 走看看