| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4107 人关注过本帖, 1 人收藏
标题:关于n的倍数,有没有高效的方法?
只看楼主 加入收藏
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:8 
程序代码:
#include <stdio.h>

#define MAX 10000

int main()
{
    int N = 8;
    size_t A[MAX] = {2, 5, 6, 3, 18, 7, 11, 19};

    size_t sum = 0, sa[MAX + 1] = {0}, ss[MAX][2] = {1}; // ss 记录sum第一次和第二次出现的位置

    for (size_t i = 0; i < N; ++i)
    {
        sum = (sum + A[i]) % N;

        sa[i + 1] = sum;
        if (ss[sum][1])  continue;
        ss[sum][ss[sum][0] != 0] = i + 2;
    }

    for (size_t i = 0; i < N; ++i)
    {
        if (ss[sa[i]][1])
        {
            printf("%zu\n%zu\n", ss[sa[i]][1] - ss[sa[i]][0], i + 1);
            break;
        }
    }

    return 0;
}


[此贴子已经被作者于2016-12-23 23:01编辑过]



[fly]存在即是合理[/fly]
2016-12-23 18:05
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
以下是引用xzlxzlxzl在2016-12-23 17:09:51的发言:

“不用递归,也不用多层循环嵌套,应该算是高效吧。”---吹版主这是使用障眼法,误导人哦!

可能是理解问题。
所谓的“不用递归,也不用多层循环嵌套...”,并没说是不用循环嵌套,只是相对来说是这个“层”固定。
不管用递归或循环嵌套来算,“深层”次都会因n与m的不同而不同。由于递归或循环嵌套都是用栈来处理,栈的实际应用空间相对来说也很有限,甚至会因变得“深不可测”而导致崩溃。
这个所谓的“换位法”,不管n与m怎样变化,只是原地转圈,不会深入,转够数就出圈,如果只算一种组合方式,就一个大圈子和里面几个同层次的小圈就可以。
2016-12-23 20:15
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
以下是引用九转星河在2016-12-23 17:18:04的发言:

看来组合问题很有看头啊我当个小学生来学习一下~

说的是目前只限C语言吧,如果用其他语言,或者“一句”就搞定。
2016-12-23 20:31
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
以下是引用xzlxzlxzl在2016-12-23 17:23:11的发言:

......变态的phython已经一句就解决了.

解释语言用一句就解决好正常的事。

2016-12-23 20:33
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
认真看看主题后,发现自己累坏了,跑了不少多余的路。
原来是要“连续的数”。
2016-12-23 20:46
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
这次应该没理解错,主题要的应该是这个结果。
图片附件: 游客没有浏览图片的权限,请 登录注册


[此贴子已经被作者于2016-12-23 22:06编辑过]

2016-12-23 22:04
搬砖
Rank: 2
等 级:论坛游民
帖 子:68
专家分:37
注 册:2016-10-13
收藏
得分:0 
回复 16楼 xzlxzlxzl
用递归,超时了
2016-12-23 22:06
搬砖
Rank: 2
等 级:论坛游民
帖 子:68
专家分:37
注 册:2016-10-13
收藏
得分:0 
回复 26楼 吹水佬
额。。这个好像不用连续的
2016-12-23 22:13
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
以下是引用搬砖在2016-12-23 22:13:29的发言:

额。。这个好像不用连续的

以下是引用搬砖在2016-12-22 19:06:38的发言:
描述
一个长度为N的数组A,从A中选出若干个连续的数,使得这些数的和是N的倍数。

题目不是要从中A选出若干个“连续”的数?
2016-12-23 22:17
搬砖
Rank: 2
等 级:论坛游民
帖 子:68
专家分:37
注 册:2016-10-13
收藏
得分:0 
回复 29楼 吹水佬
是我没看清楚啊
2016-12-23 22:35
快速回复:关于n的倍数,有没有高效的方法?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.034503 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved