C++编写程序实现线性移位寄存器

编写程序实现线性移位寄存器
【问题描述】
输入:
(1)GF(2)上的线性移位寄存器的阶数n小于等于10,
(2)反馈函数f(x1,x2,...xn)=C1X1+C2X2+...+CnXn的系数c1,C2,…,Cn
(3)初始状态S0=(a0,a1,...,an-1)中的a0,a1,...,an-1
输出:周期p,以及输出序列
【输入形式】
输入为3行:
第1行:线性移位寄存器的阶数n 
第2行:反馈函数的系数
第3行;初始状态

【输出形式】
输出为2行:
第1行:为周期p;
第2行:输出序列(输出n+p位)。
【样例输入】
5

10010
10011
样例输出
31
10011010010000101011101100011111011

代码: 

#include<iostream>

using namespace std;

int main(void)

{

    int n;

    cin>>n;

    char x[n],c[n];

    int f[n],s[n];

    cin>>x>>c;

   

    for(int i=0;i<n;i++)

    {

        if(x[i]=='0')f[i]=0;

        else f[i]=1;

    }  

    for(int i=0;i<n;i++)

    {

        if(c[i]=='0')s[i]=0;

        else s[i]=1;

    }

    int M[10000]={0};

    for(int i=0;i<n;i++)

    {

        M[i]=s[i];

    }

   

    int j=0;

    for(int i=n;i<10000;i++)

    {

        int sum=0;

        for(int k=0;k<n;k++)

        {

            sum=M[i-1-k]*f[n-k-1]+sum;   //计算下一项的和

        }

        M[i]=sum%2;        

        j++;

       

        int c=0;

        for(c=0;c<n;c++)

        {

            if(M[i-c]!=M[n-c-1])  //判断是否形成周期

            break;

           

        }

        if(c==n)

        break;

    }

    cout<<j<<endl;

    for(int i=0;i<n+j;i++)

    {

        cout<<M[i];

    }

    return 0;

}

  • 12
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值