sdjzu 1072

本文提供了解决等差、等比和斐波那契数列问题的方法,通过给定的前五个整数,推导出后续五个整数。涉及数学逻辑与算法应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1072:找规律填数字分数: 1

时间限制:1 秒
内存限制:32 兆
特殊判题: 否
提交:52
解决: 11

题目描述

小宇正在读小学,今天老师布置了几道数学题目。小宇平时上课经常不专心,这些他可发愁了,怎么办呢?看看你能不能帮帮他。
题目是给你一组有规律序列的前面5个整数,请你给出它后面跟着的5个整数,如:1,2,3,4,5,___,___,___,__,___。这是个等差数列,后面应该是6,7,8,9,10,就这么简单。而且现在小宇已经知道这串序列要么是等差数列,要么是等比数列或者是斐波那契数列。

输入格式

输入包含多组测试数据。每组输入5个整数,每个数字之间隔一个空格,当5个数字都为0时输入结束。

输出

对于每组输入,输出这串数列的后面5个数字,每个数字之间隔一个空格。

样例输入

1 2 3 4 5
1 2 4 8 16
1 2 3 5 8
0 0 0 0 0

样例输出

6 7 8 9 10
32 64 128 256 512
13 21 34 55 89

提示[+]

*** 提示已隐藏,点击上方 [+] 可显示 ***


这是一个简单题目,但是想过却不容易的


#include<iostream>
#include<cstdio>
#include<cstring>
struct info
{
    int flag;
    double  a;
}unit[100];
using namespace std;
int main()
{
    int i,j,k,l;
    while(cin>>unit[0].a>>unit[1].a>>unit[2].a>>unit[3].a>>unit[4].a)
    {

     if((unit[0].a==0)&&(unit[1].a==0)&&(unit[2].a==0)&&(unit[3].a==0)&&(unit[4].a==0))
     break;

     for(i=0;i<5;i++)
     unit[i].flag=0;
     double  d1,d2,d3,d4,d5;
     d5=1;
     for(k=0;k<3&&d5;)
     {
         if(k==0)//dengcha
         {
             d1=unit[1].a-unit[0].a;
             d2=unit[2].a-unit[1].a;
             d3=unit[3].a-unit[2].a;
             d4=unit[4].a-unit[3].a;
             if((d1==d2)&&(d2==d3)&&(d3==d4))
             {
                 unit[0].flag=1;
                 d5=0;
             }
             k++;
         }
         else
         if(k==1)
         {
             d1=unit[1].a/unit[0].a;
             d2=unit[2].a/unit[1].a;
             d3=unit[3].a/unit[2].a;
             d4=unit[4].a/unit[3].a;
             //printf("%d %d %d %d",d1,d2,d3,d4);
             if((d1==d2)&&(d2==d3)&&(d3==d4))
             {
                 unit[0].flag=2;
                 d5=0;
                 break;
             }

             k++;
         }
         else
         if(k==2)
         {
             unit[0].flag=3;
             d5=0;
         }

     }
     if((unit[0].a==unit[1].a)&&(unit[1].a==unit[2].a)&&(unit[2].a==unit[3].a)&&(unit[3].a==unit[4].a)&&unit[0].a!=0)
    {
           for(i=0;i<2;i++)
           printf("%.f %.f %.f %.f %.f\n",unit[0].a,unit[1].a,unit[2].a,unit[3].a,unit[4].a);

    }
     else
     if(unit[0].flag==1)
     {

         d1=unit[1].a-unit[0].a;
         unit[5].a=unit[4].a+d1;
         for(i=6;i<10;i++)
         {
             unit[i].a=unit[i-1].a+d1;
         }
         for(i=5;i<9;i++)
          printf("%.f ",unit[i].a);
         printf("%.f\n",unit[9].a);
     }
     else
     if(unit[0].flag==2)
     {
         d1=unit[1].a/unit[0].a;
         unit[5].a=unit[4].a*d1;
         //printf("kkk%dkkk\n",d1);
         for(i=6;i<10;i++)
         {
             unit[i].a=unit[i-1].a*d1;
         }
          for(i=5;i<9;i++)
         printf("%.f ",unit[i].a);
         printf("%.f\n",unit[9].a);
     }
     else
     {
         for(i=5;i<10;i++)
         {
             unit[i].a=unit[i-1].a+unit[i-2].a;
             //printf(" h%dh \n",unit[i].a);
         }

          for(i=5;i<9;i++)
          printf("%.f ",unit[i].a);
         printf("%.f\n",unit[9].a);

     }

    }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值