2019第十届蓝桥杯c语言B组省赛等差数列,一直显示运行错误,各位大佬能帮忙看看哪里错了吗 - 爱问答

(爱问答)

2019第十届蓝桥杯c语言B组省赛等差数列,一直显示运行错误,各位大佬能帮忙看看哪里错了吗

#include<stdio.h>
#include<string.h>
 
int find(int s[],int a,int n)
{
    for(int i=0;i<n;i++)
    {
        //printf("a=%d ",a);
        //for(int j=0;j<n;j++)
            //printf("%d ",s[j]);
        if(s[i]>=a&&((s[i]%a)!=0))
            return 0;
        else if(s[i]<a&&((a%s[i])!=0))
            return 0;
    }
    return 1;
}
 
int main()
{
    int n;
    scanf("%d",&n);
    int a[100];
    for(int i=0;i<n;i++)
        scanf("%d",&a[i]);
    //排序
    int t;
    for(int i=0;i<n-1;i++)
    {
        for(int j=i+1;j<n;j++)
        {
            if(a[i]>a[j])
            {
                t=a[i];
                a[i]=a[j];
                a[j]=t;
            }
        }
    }
    //求两两差值不同的个数
    int b[100];
    int count=n-1;
    for(int i=0;i<n-1;i++)
    {
        b[i]=a[i+1]-a[i];
    }
    for(int i=0;i<n-2;i++)
    {
        for(int j=i+1;j<n-1;j++)
        {
            if(b[i]==b[j])
                count--;
        }
    }
 
    //求约数个数
    //printf("a[n]=%d,a[n-1]=%d,a[4]=%d,a[0]=%d ",a[n],a[n-1],a[4],a[0]);
    int x=a[n-1]-a[0];
    //printf("x=%d ",x);
    int c[100];
    int w=-1;
    for(int i=2;i<(x+1)/2;i++)
    {
        if(x%i==0)
            c[++w]=i;
    }
 
    //for(int i=0;i<w+1;i++)
        //printf("%d ",c[i]);
//printf(" ");
 
    //求等差数列个数
    int s[100],max=a[0];
    int y=0,q;
    for(int i=0;i<w+1;i++)
    {
        int r=0;
        if(find(a,c[i],n))
        {
            //printf("max+c[i]=%d ",max+c[i]);
            while(max!=a[n-1])
            {
                r++;
                max=max+c[i];
                q=1;
            }
            if(q=1)
            {
                s[y]=r+1;
                y++;
                q=0;
            }
        }
    }
 
     //for(int i=0;i<y;i++)
        //printf("%d ",s[i]);
//printf(" ");
 
    //判断最小的个数
    int min=s[0];
    for(int i=1;i<y;i++)
    {
        if(min>s[i])
            min=s[i];
    }
    printf("%d",min);
    return 0;
}

首先,逻辑上有明显的错

     if(q=1)            {

正确的肯定是

     if(q==1)            {

另外,经测试,算法上还是有问题的

数据范围也不对(你的a下标才100?)

网上有现成正确的,你参考下

#include<bits/stdc++.h> using namespace std; int Ai[100005]; int main(){ int N; cin>>N; for(int i = 0; i < N; i++) cin>>Ai[i]; sort(Ai, Ai + N); int min_d = Ai[1] - Ai[0]; //升序排的序,所以公差大于0 if(min_d == 0) //如果 Ai[1] - Ai[0]等于0,说明这些数必定全部相等,那最小值就是N cout<<N<<endl; else{ int gcd = min_d; for(int i = 2; i < N; i++){ min_d = __gcd(min_d, Ai[i] - Ai[i - 1]); } cout<<(Ai[N - 1] - Ai[0]) / min_d + 1<<endl; } return 0; }

相关标签:c语言

下一篇:javaScript题目:给一个不多于5位的正整数,要求:一、输出它是几位数,二、逆序打印出各位数字

上一篇:爱普生打印机L360,打印机中的废墨收集垫已到使用寿命,亮红灯不能打印?

热门标签:
excel 网盘 破解 word dll
最新更新:
微软重新评估新的Outlook的使用时机 联想推出搭载联发科Helio G80芯片组的Tab M9平板 英特尔创新大赛时间确定! 微软Edge浏览器在稳定渠道中推出Workspaces功能 英伟达RTX4060TiGPU推出MaxSun动漫主题! 谷歌地图为用户提供了街景服务! GameSir 在T4 Kaleid中推出了一款出色的控制器! 微软开始在Windows 11 中测试其画图应用程序的新深色模式! LG电子推出全球首款无线OLED电视 英伟达人工智能芯片崭露头角! Steam Deck可以玩什么游戏-Steam Deck价格限时优惠 雷蛇推出CobraPro鼠标 Kindle电子阅读器可以访问谷歌商店吗 Windows10如何加入组策略 window10图片查看器怎么没有了?