c新手吧 关注:8,605贴子:48,111
  • 6回复贴,共1

小白求教:程序出来的结果总是22不是28 , 我找不出哪里错误。

只看楼主收藏回复

题目如下:某市体育彩票采用整数1、2、3、…、36表示36种体育运动,一张彩票可选择7种运动。编写程序,选择一张彩票的号码,使这张彩票的7个号码之和是105且相邻两个号码之差按顺序依次是1、2、3、4、5、6。例如第一个号码是1,则后续号码应是2、4、7、11、16、22。”
程序如下:
#include<stdio.h>
int main()
{
int n,j,i,sum=0;
for(n=1;n<=36;n++)
{for(j=0;j<7;j++)
{
n=n+j;
sum=sum+n;
}
if(sum==105&&n<=36);break;
}
printf("%d\t",n);
}
求大神帮忙看下。。。。


1楼2016-04-06 19:05回复
    # include <stdio.h>
    int main(void)
    {
    int i,j,sum=0,n[7]={0};
    for(i=1;i<=36;i++)
    {
    n[0]=i;sum=n[0];
    for(j=1;j<=6;j++)
    {
    n[j]=n[j-1]+j;sum+=n[j];
    }
    if(sum==105)
    break;
    }
    for(i=0;i<7;i++)
    printf("%d",n[i])
    return 0;
    }


    IP属地:安徽来自Android客户端2楼2016-04-07 10:43
    回复
      一张彩票7个号相当于一个一维数组


      IP属地:安徽来自Android客户端3楼2016-04-07 11:17
      收起回复
        已知道题目的条件了,可以试着反过来做:
        #include<stdio.h>
        int main(void)
        {
        int min,i,j,m;
        min=105;
        for(i=1,j=0;i<8;i++)
        { j=j+i; //符合条件的第1--7数间相差的值(以最小的数为0来计算)
        min=min-j; //知道结果为105,减去相差的值,求出7个一样的值(最小值)
        }
        m=min/7; //求出第一个数
        if(m+j>36) //判断符合条件的最大的运动所带表的数值是否超出36(种运动)
        printf("所求无解"); //超出条件,不存在条件要求的数值
        else
        for(i=0,j=0;i<7;i++) //这个道理同上面的循环
        {
        j=j+i;
        printf("%d\n",m+j);
        }
        return 0;
        }
        (菜鸟,大神指教,希望勿喷


        4楼2016-04-08 14:48
        回复
          这样试试
          # include <stdio.h>
          int main(void)
          {
          int i,j,sum,n;
          for(i=1;i<=36;i++)
          {
          sum=n=i;
          for(j=1;j<=6;j++)
          {
          n=n+j;sum+=n;
          }
          if(sum==105)
          break;
          }
          for(j=0;j<7;j++)
          printf("%d",i+=j)
          return 0;
          }


          IP属地:安徽来自Android客户端5楼2016-04-08 20:33
          回复