启动! 2021-10-15 07:49 采纳率: 80%
浏览 52
已结题

C语言验证尼克切丝定理

C语言验证尼克切丝定理
【问题描述】尼克切丝定理: 任何一个整数n的立方都可以表示成一串连续的奇数之和。 设计程序验证尼克切丝定理。
【输入形式】一个整数n,2<=n<=30
【输出形式】一个奇数a和一个整数k,使 a+(a+2)+..+(a+2k-2) = n*n*n 。要求k >= 2,并且k尽可能小。
【样例输入】

3
【样例输出】

7 3
【样例说明】7 + 9 + 11 = 27

  • 写回答

1条回答 默认 最新

  • 胸毛男 2021-10-15 09:38
    关注

    img

    
    // caimi10.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include <algorithm>
    #include <vector>
    
    using namespace std;
    
    // 尼克切丝定理
    
    vector<int> NiKeQieSidiscipline(int i3CiFangShu)
    {
        i3CiFangShu = i3CiFangShu*i3CiFangShu*i3CiFangShu;
        vector<int> vecresult_startItem_k_items;
        vecresult_startItem_k_items.reserve(9);
        int k = 2;
        double dbStartItem = 0;
    
        while (true)
        {
            // k其实就是项数  k个连续奇数 每个差定值2 所以等差数列  首项加尾项乘以项数除以2  (0+(2*k-1))*k/2 就是所有的差
    
            // 立方数减去所有差 就是第一项
            dbStartItem = (double)(i3CiFangShu - (0 + 2 *( k - 1))*k / 2) / k;
    
            if (dbStartItem >= i3CiFangShu)
            {
                break;
            }
            else
            {
                if ((int)dbStartItem != dbStartItem) // 含有小数
                {
                    k++; //还没找到头 继续
                    continue;
                }
                else
                {
                    // 找到了组合
                    vecresult_startItem_k_items.push_back(dbStartItem);
                    vecresult_startItem_k_items.push_back(k);
                    for (size_t i = 0; i < k; i++)
                    {
                        vecresult_startItem_k_items.push_back(dbStartItem + i * 2);
                    }
                    break;
    
                }
            }
        }
    
        return vecresult_startItem_k_items;
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        printf("尼克切丝定理: 任何一个整数n的立方都可以表示成一串连续的奇数之和。 设计程序验证尼克切丝定理。\n");
    
        int n = 0;
        printf("输入n  2<=n<=30\n");
        scanf_s("%d", &n);
    
    
        vector<int> vecresult_startItem_k_items = NiKeQieSidiscipline(n);
    
        printf(" %d ", vecresult_startItem_k_items[0]);
        printf(" %d ", vecresult_startItem_k_items[1]);
        printf("\n");
        for (size_t i = 2; i < vecresult_startItem_k_items.size(); i++)
        {
            if (i == vecresult_startItem_k_items.size() - 1)
            {
                printf(" %d =", vecresult_startItem_k_items[i]);
            }
            else
            {
                printf(" %d +", vecresult_startItem_k_items[i]);
            }
        }
        printf(" %d ", n*n*n);
    
    
        _tsystem(L"pause");
    
        return 0;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月2日
  • 已采纳回答 10月25日
  • 请采纳用户回复 10月18日
  • 创建了问题 10月15日

悬赏问题

  • ¥60 要数控稳压电源测试数据
  • ¥15 能帮我写下这个编程吗
  • ¥15 ikuai客户端l2tp协议链接报终止15信号和无法将p.p.p6转换为我的l2tp线路
  • ¥15 经gamit解算的cors站数据再经globk网平差得到的坐标做形变分析
  • ¥15 GD32 SPI通信时我从机原样返回收到的数据怎么弄?
  • ¥15 phython读取excel表格报错 ^7个 SyntaxError: invalid syntax 语句报错
  • ¥20 @microsoft/fetch-event-source 流式响应问题
  • ¥15 ogg dd trandata 报错
  • ¥15 高缺失率数据如何选择填充方式
  • ¥50 potsgresql15备份问题