• 洛谷2765 魔术球问题


    题目描述

    «问题描述:

    假设有n根柱子,现要按下述规则在这n根柱子中依次放入编号为1,2,3,...的球。

    (1)每次只能在某根柱子的最上面放球。

    (2)在同一根柱子中,任何2个相邻球的编号之和为完全平方数。

    试设计一个算法,计算出在n根柱子上最多能放多少个球。例如,在4 根柱子上最多可放11 个球。

    «编程任务:

    对于给定的n,计算在n根柱子上最多能放多少个球。

    输入输出格式

    输入格式:

    第1 行有1个正整数n,表示柱子数。

    输出格式:

    程序运行结束时,将n 根柱子上最多能放的球数以及相应的放置方案输出。文件的第一行是球数。接下来的n行,每行是一根柱子上的球的编号。

    输入输出样例

    输入样例#1:
    4
    输出样例#1:
    11
    1 8
    2 7 9
    3 6 10
    4 5 11

    贪心,枚举每个柱子,能放就放,不能放就另加一个柱子,直至n个柱子
    #include<cmath>
    #include<cstdio>
    using namespace std;
    int a[3001][3001];
    int main()
    {
        int n;
        scanf("%d",&n);
        int now=1,sum=0;
        bool ok; int tmp;
        while(1)
        {
            ok=false;
            for(int i=1;i<=sum;i++)
            {
                if((int)sqrt(now+a[i][a[i][0]])==sqrt(now+a[i][a[i][0]]))
                {
                    ok=true;
                    a[i][++a[i][0]]=now;
                    break;
                }
            } 
            if(!ok) 
            {
                if(sum<n)a[++sum][++a[sum][0]]=now; 
                else break;
            }
            now++;
        }
        printf("%d
    ",now-1);
        for(int i=1;i<=sum;i++)
        {
            for(int j=1;j<=a[i][0];j++) printf("%d ",a[i][j]);
            printf("
    ");
        }
    }

    判完全平方数无限WA:

    if(sqrt(1.0*tmp)*sqrt(1.0*tmp)==1.0*tmp)

  • 相关阅读:
    Python 学习日记 第七天
    Python 学习日记 第六天
    Python 学习日记 第五天
    Python 学习日记 第四天
    Redis 中的数据类型及基本操作
    Asp.net mvc 中View 的呈现(二)
    Asp.net mvc 中View的呈现(一)
    Asp.net mvc 中Action 方法的执行(三)
    Asp.net mvc 中Action 方法的执行(二)
    Asp.net mvc 中Action 方法的执行(一)
  • 原文地址:https://www.cnblogs.com/TheRoadToTheGold/p/6915267.html
Copyright © 2020-2023  润新知