zoukankan      html  css  js  c++  java
  • UVALive5661 UVA668 ZOJ2037 Parliament

    问题链接UVALive5661 UVA668 ZOJ2037 Parliament

    问题简述:参见上述链接。

    问题分析

      分拆的结果,不应该从1开始。1×x=1。所以应该从2开始。

      分拆的结果可能是2,3,4,5,......,k(各个值互不相等)。

      对于输入的n,减去前k-2项之和后,剩余的值可能小于k+1。这时,需要将剩余的值分配到各个数中,自然从后向前分配。

    程序说明:需要注意输出格式。

    AC的C++语言程序如下:

    /* UVALive5661 UVA668 ZOJ2037 Parliament */
    
    #include <iostream>
    #include <cmath>
    
    using namespace std;
    
    const int N = 100;
    
    int ans[N];
    
    int main()
    {
        int m, n, i, j;
    
        cin >> m;
    
        for(int k=1; k<=m; k++) {
            if(k != 1)
                cout << endl;
    
            cin >> n;
    
            // 从左往右放
            i = 2;
            while(n >= i) {
                ans[i] = i;
                n -= i;
                i++;
            }
            i--;
    
            // 从右往左放
            j = i;
            while(n > 0 && j >= 2) {
                ans[j--]++;
                n--;
            }
    
            // 还有剩余
            if(n)
                ans[i]++;
    
            // 输出结果
            for(j=2; j<=i; j++) {
                if(j>2)
                    cout << " ";
                cout << ans[j];
            }
            cout << endl;
        }
    
        return 0;
    }



  • 相关阅读:
    Go Revel
    Go Revel
    Go Revel
    Go Revel
    deployment:声明式的升级应用
    Kubernetes架构及相关服务详解
    Docker 安装MySQL
    日志收集-Elk6
    Jenkins-Multijob plugin多任务串并行
    ansible创建vmware虚拟机
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7563968.html
Copyright © 2011-2022 走看看