| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2072 人关注过本帖
标题:等差数列的子序列个数, 求指导算法
只看楼主 加入收藏
东南风
Rank: 1
等 级:新手上路
威 望:1
帖 子:19
专家分:5
注 册:2016-9-2
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
等差数列的子序列个数, 求指导算法
自已写了一个,不知对不对. 用较小的数列测试是正确的.
程序代码:
#include <stdio.h>
int adj(int *,int);
void print(int ,int ,int ,int *);
int main(void)
{
    int ar[]={2, 4, 6, 8, 10, 12}; 
    int len=sizeof(ar)/sizeof(ar[0]);
    printf("子序列数 = %d", adj(ar,len));
}
int adj(int *ar,int len)
{   
    int n=0;
    for (int i=2;i<len;i++)
        for (int j=0;j<=i-2;j++)
            for (int d=1;d<=(i-j)/2;d++)                
                if ((i-j) % d == 0){    
                    ++n;
                    print(i,j,d,ar);
                } 
    return n;                  
}
void print(int i,int j,int d,int *ar)
{
    for (;j<=i;j+=d)
        printf("%d ", ar[j]);
    putchar('\n');
}
搜索更多相关主题的帖子: for 子序列 数列 int print 
2021-06-06 21:13
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:566
专家分:3690
注 册:2019-7-29
收藏
得分:7 
你这个只要整个数组为等差数列时正确,如果数组不为等差数列,得到的值不对。

程序代码:
#include <stdio.h>

int adj(int *,int);
void print(int,int *);

int main(void)
{
    int ar[]= {2, 4, 6, 8, 10, 12};
    int len=sizeof(ar)/sizeof(ar[0]);
    printf("子序列数 = %d", adj(ar,len));
}

int adj(int *ar,int len)
{
    int n=0,j,k,step_len,diff=0;
    for (step_len=3; step_len<=len; step_len++)
    {
        for (j=0; j<=len-step_len; j++)
        {
            for (k=j; k<j+step_len-1; k++)
            {
                if(k==j)
                    diff=ar[k+1]-ar[k];

                //printf("j=%d,k=%d,ar[k]=%d,ar[k+1]=%d,diff=%d\n",j,k,ar[k],ar[k+1],diff);

                if(ar[k+1]-ar[k] != diff)
                    break;
            }
            if(k==j+step_len-1)
            {
                ++n;
                print(step_len,ar+j);
            }
        }
    }
    return n;
}

void print(int j,int *ar)
{
    int n=0;
    while(n<j)
        printf("%d ", ar[n++]);
    putchar('\n');
}

一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2021-06-07 08:57
东南风
Rank: 1
等 级:新手上路
威 望:1
帖 子:19
专家分:5
注 册:2016-9-2
收藏
得分:0 
回复 2楼 纯蓝之刃
谢谢, 老师指点. 您代码中语句: diff=ar[k+1]-ar[k] 意味着只能找到公差为两相邻元素之差的子序列. 比如例子中还有"2 6 10"和"4 8 12"没有找到. 对大师代码还没有完全看懂, 请大师再核实一下代码.
2021-06-07 10:28
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:7 
把完整的题目要求发一下
2021-06-07 10:36
东南风
Rank: 1
等 级:新手上路
威 望:1
帖 子:19
专家分:5
注 册:2016-9-2
收藏
得分:0 
回复 4楼 rjsp
一个人在VBA论坛上问的, 是力扣上的一个题目:https://
2021-06-07 11:34
快速回复:等差数列的子序列个数, 求指导算法
数据加载中...
 
   



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

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