zoukankan      html  css  js  c++  java
  • P2765 魔术球问题

    题目描述

    «问题描述:

    假设有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个柱子 往上放编号1--n的球 要求每根柱子上相邻球的编号和为完全平方数。
    【思路】
    贪心
    能放就放 不能放放下一个柱子
    【code】

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    using namespace std;
    int now=1,n,flag,num;
    int a[2000][2000];
    int check(int x) {
        if(sqrt(x)*sqrt(x)==x)return 1;
        return 0;
    }
    int main() {
        scanf("%d",&n);
        while(1) {
            flag=0;
            for(int i=1; i<=num; i++) {
                if((int)sqrt(now+a[i][a[i][0]])==sqrt(now+a[i][a[i][0]]))
                 {
                    a[i][++a[i][0]]=now;
                    flag=1;
                    break;
                }
    
        }
            if(!flag) {
                if(num<n)
                a[++num][++a[num][0]]=now;
                else break;
            }
            now++;
        }
        printf("%d
    ",now-1);
        for(int i=1; i<=num; i++) {
            for(int j=1; j<=a[i][0]; j++)    {
                printf("%d ",a[i][j]);
            }
            printf("
    ");
        }
    
        return 0;
    }
  • 相关阅读:
    32 renren-fast-vue安装报错问题
    31 element自定义图片上传
    30 图片预览
    29 element-table样式更改
    28 ant-design-vue-jeecg运行报错问题
    27 mysql8安装
    25 mybatis-plus常用语法
    24 element表单校验
    23 鼠标移入移出更换样式
    22 初识mysql外键
  • 原文地址:https://www.cnblogs.com/zzyh/p/7011248.html
Copyright © 2011-2022 走看看