| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 279 人关注过本帖
标题:看看我写的哪里有问题,输出不对
只看楼主 加入收藏
白茶清欢
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2018-12-2
结帖率:57.14%
  已结贴   问题点数:2  回复次数:5   
看看我写的哪里有问题,输出不对
/*题目描述:
传说fans是一个数学天才。在他五岁那年,从一堆数字卡片中选出了4张 卡片:5,7,6,8。这4个数字有什么神秘之处呢?如果把这4张卡片自左往右的排成:5,6,7,8。你就会发现:原来这4个数字构成了等差数列!当年 fans选出了n组卡片,据说都能够构成等差数列。但是事实真的是这样吗?fans真的有这么神奇吗? n组数据就是fans选出的n组卡片,请你判断每一组卡片是否能构成等差数列.
输入:
第一个数为数据的组数n,表示后面有n行,每行中的第一个数为该组数据的元素个数m(1≤m≤100),其后是m个正整数(不会超出int的表示范围)。
输出:
如果能够构成等差数列,输出“yes”,否则输出“no”。
样例输入:
2
4 5 7 6 8
8 1 7 3 2 8 12 78 3
样例输出:
yes
no  */
#include<stdio.h>
int main()
{
    int item,d;
    int n,m,i,j,t,a[100];
    scanf("%d",&n);
    while(n--)
    {
        scanf("%d",&m);
        for(j=0;j<m;j++)
        {
            scanf("%d",&a[j]);
        }
        for(j=0;j<m-1;j++)
        {
            for(i=0;i<m-1-j;i++)
            {
                if(a[i]>a[i+1])
                {
                    t=a[i];
                    a[i]=a[i+1];
                    a[i+1]=t;
                }
            }
        }
        d=a[1]-a[0];
        for(i=0;i<m;i++)
        {
            if(a[i+1]-a[i]==d)
            {
                item=1;
            }
        }
        if(item==1)
            printf("yes\n");
        else
            printf("no\n");
    }
        return 0;
    }
2019-02-03 21:12
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:版主
威 望:379
帖 子:13178
专家分:50842
注 册:2012-10-18
  得分:1 
加标志的那个循环有问题,
大致应该是?—?如果不等于?时,加个标志,并break,退出循环

DO IT YOURSELF !
2019-02-04 07:34
NIALK
Rank: 1
等 级:新手上路
帖 子:12
专家分:1
注 册:2019-2-3
  得分:1 
#include<stdio.h>
int main()
{
    int item[100],d,y,x;
    int n,m,i,j,t,a[100];
    scanf("%d",&n);
    y=x=n;
    while(n--)
    {
        scanf("%d",&m);
        for(j=0;j<m;j++)
        {
            scanf("%d",&a[j]);
        }
        for(j=0;j<m-1;j++)
        {
            for(i=0;i<m-1-j;i++)
            {
                if(a[i]>a[i+1])
                {
                    t=a[i];
                    a[i]=a[i+1];
                    a[i+1]=t;
                }
            }
        }
        d=a[1]-a[0];
        for(i=0;i<m-1;i++)
        {
            if((a[i+1]-a[i])==d)
            
                item[y]=1;
            else
            {
                item[y]=0;
            break;
            }
        }
        y--;
   
        
    }
    y=x;
        for(;y>0;y--)
        { if(item[y]==1)
            printf("yes\n");
        else
            printf("no\n");
      
        }
        return 0;
    }
2019-02-04 14:07
NIALK
Rank: 1
等 级:新手上路
帖 子:12
专家分:1
注 册:2019-2-3
  得分:0 
在a[i]的时候你过了一个量
还有你没有能把item的值储存下来
我上面这个程序是改良你的,我试过没错

2019-02-04 14:10
李少iii
Rank: 4
来 自:KUNMING
等 级:业余侠客
威 望:2
帖 子:53
专家分:212
注 册:2018-10-4
  得分:1 
#include<stdio.h>
int main()
{
    int item[100],d,y,x;
    int n,m,i,j,t,a[100];
    scanf("%d",&n);//看有几行
    y=x=n;
    while(n--)
    {
        scanf("%d",&m);//看有几个数构成
        for(j=0;j<m;j++)
        {
            scanf("%d",&a[j]);
        }
        for(j=0;j<m-1;j++)//冒泡算法,小的在前大的在后
        {
            for(i=0;i<m-1-j;i++)
            {
                if(a[i]>a[i+1])
                {
         //改写本指针
             t=*(a+i);
             *(a+i)=*(a+i+1);
             *(a+i+1)=t;
                   /* t=a[i];
                    a[i]=a[i+1];
                    a[i+1]=t;*/
                }
            }
        }
        d=a[1]-a[0];//求得公差d
        for(i=0;i<m-1;i++)
        {
            if((a[i+1]-a[i])==d)
            
                item[y]=1;
            else
            {
                item[y]=0;
            break;//跳出当前循环
            }
        }
        y--;//下一行开始
   
        
    }
    y=x;//把y值恢复
        for(;y>0;y--)
        { if(item[y]==1)
            printf("yes\n");
        else
            printf("no\n");
      
        }
        return 0;
    }
我试着理解了一下,能达到效果

我不曾拥有梦想,但我坚信我有未来……
2019-02-04 14:43
lxk1732942
Rank: 6Rank: 6
等 级:侠之大者
威 望:3
帖 子:402
专家分:401
注 册:2018-9-4
  得分:1 
第一次遍历数组,可以找到最小值和最大值,再利用项数,便可求出公差(若公差不是整数,直接淘汰),弄一个标志数组长度100,全部置0,开始第二次遍历,每次遇到一个数,便可根据公式确定其在数列中的位置,将此位置标记为1,如果在标记该位置前该位置的标记就已经是1了,那么淘汰,如果遍历完,说明该数组可以组成等差数列
收到的鲜花
  • rjsp 于 2019-02-11 09:49 送鲜花  1朵  
2019-02-05 07:29







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

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