Graveyard Design

King George has recently decided that he would like to have a new design for the royal graveyard. The graveyard must consist of several sections, each of which must be a square of graves. All sections must have different number of graves.
After a consultation with his astrologer, King George decided that the lengths of section sides must be a sequence of successive positive integer numbers. A section with side length s contains s 2 graves. George has estimated the total number of graves that will be located on the graveyard and now wants to know all possible graveyard designs satisfying the condition. You were asked to find them.

Input
Input file contains n --- the number of graves to be located in the graveyard (1 <= n <= 10 14 ).
Output
On the first line of the output file print k --- the number of possible graveyard designs. Next k lines must contain the descriptions of the graveyards. Each line must start with l --- the number of sections in the corresponding graveyard, followed by l integers --- the lengths of section sides (successive positive integer numbers). Output line's in descending order of l.
Sample Input
2030
Sample Output
2
4 21 22 23 24
3 25 26 27

因为本人比较菜,,,刚接触算法,所以对很多不是很了解。这个题刚看到的时候有点蒙,不知道怎么做,看了一下教程知道是典型的尺取法。但这个代码是看完别人的按照自己的思维打出来的,先解释一下。题意说是给定一个数字,找出连续的正整数的平方的和跟它相等。尺取法这个的大致意思是从r=1开始,sum+=r*r,r++,在r递增的时候从1开始的平方和sum也递增,直到sum大于输入的数字n,在大于之后说明前面的小的数字的平方和应该丢掉一些,所以从l=1开始在sum里边减去递增的l的平方,直到减到sum<n再一次发生,然后在在原来的基础上递增r使其的平方和加到sum里边使sum再一次增大大于n,然后通过l的增使sum减小,用r的增大让sum增大,不断使中间数的平方和趋近与n直到sum=n。这里面有两个判断条件:第一个是sum==n,这个条件成立就说明已经找到了想要的数字,此时记录在二维数组里等待输出。还有一个判断条件就是ap=r*r与n的大小关系,代码中我转换成t(n的平方根)和r的大小关系是一样的。如果单独的r已经大于t了的话,再循环也就没意义了,肯定不会存在连续的数字平方的和来输出,所以这应该作为循环结束条件来使用。最后还需要在输出的时候思考一下,此处不再赘述。代码如下:

#include <stdio.h>
#include <stdlib.h>
#include<math.h>
int main()
{
    int i=1,j;
    long long int a[10000][2],n,ap=0,t,sum=0,k,l=1,r=1;
    scanf("%I64d",&n);
    t=(int)sqrt(1.0*n);
    while(l<=t)
    {
        while(ap<n&&sum<n)
        {
             ap=r*r;
             sum+=ap;
             r++;
        }
        if(sum==n)
        {
            a[i][0]=l;
            a[i][1]=r;
            i++;
        }
        sum-=l*l;
        l++;
    }
    printf("%d\n",i-1);
    for(j=1;j<i;j++)
    {
        printf("%I64d ",a[j][1]-a[j][0]);
        for(k=a[j][0];k<a[j][1];k++)
        {
          printf("%I64d ",k);
        }
        printf("\n");
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于javaweb墓地管理系统,我可以为您提供一些介绍和演示。 墓地管理系统是一个用于管理和维护墓地信息的系统。它可以帮助管理者记录和查询墓地的基本信息,包括墓地位置、墓主人信息、墓地状态等。此外,墓地管理系统还可以提供一些额外的功能,如墓地预订、墓地维护、墓地费用管理等。 在JavaWeb开发中,可以使用Java语言和相关的技术来实现墓地管理系统。以下是一个简单的演示示例: 1. 数据库设计:首先,需要设计一个数据库来存储墓地信息。可以创建一个名为"graveyard"的数据库,并在其中创建一个名为"grave"的表,用于存储墓地信息。 2. 后端开发:使用Java语言和JavaWeb框架(如Spring MVC)来开发后端代码。可以创建一个名为"GraveController"的控制器类,用于处理墓地相关的请求。在该控制器中,可以实现一些方法,如添加墓地、查询墓地、修改墓地信息等。 3. 前端开发:使用HTML、CSS和JavaScript等前端技术来开发用户界面。可以创建一个名为"grave.jsp"的JSP页面,用于展示墓地信息和提供相关操作。在该页面中,可以使用表格来展示墓地列表,并提供一些按钮和表单来进行墓地的添加、查询和修改等操作。 4. 数据库连接:使用JDBC或者ORM框架(如MyBatis)来连接数据库,并实现数据的增删改查操作。可以在后端代码中编写相应的数据库连接和操作代码,以实现与数据库的交互。 5. 部署和测试:将开发好的代码部署到JavaWeb服务器(如Tomcat)上,并进行测试。可以通过访问相应的URL来测试墓地管理系统的功能,如添加墓地、查询墓地等。 这只是一个简单的示例,实际的墓地管理系统可能还涉及到其他功能和技术。希望这个演示能够帮助您对javaweb墓地管理系统有一个初步的了解。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值