Technocup 2017 - Elimination Round 1

算法挑战:数列转换与总价计算

A. Transformation: from A to B

题意

对A的操作有:
(1)将A乘于2
(2)在A后面补充一个1
你可以执行上诉操作若干次,问能否得到B?如果能输出操作过程的数。

解题思路

逆向思考,从B出发,如果B最后一位是1,那么逆向执行(2)操作,如果是偶数,则逆向执行(1)。

参考代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll ans[80000];
int main(){
    ll a,b;
    while (cin>>a>>b){
        int k=0;
        ans[k++]=b;
        while (b>a){
            if (b%10==1)    b/=10;
            else if (b%2==0) b/=2;
            else{
                cout<<"NO"<<endl;
                return 0;
            }
            ans[k++]=b;
        }
        if (b<a){
            cout<<"NO"<<endl;
        }
        else{
            cout<<"YES"<<endl;
            cout<<k<<endl;
            for (int i=k-1;i>=0;i--) cout<<ans[i]<<" ";
            cout<<endl;
        }
    }
    return 0;
}

B. Bill Total Value

题意

在一个字符串里面有商品的名字跟价格,需要你从这个字符串里面提取出价格,然后求出所有的价格之和。

解题思路

将价格分割成美元和美分,分别求和。

参考代码

#include <bits/stdc++.h>
using namespace std;
char str[1005];
bool isNum(char x){
    if ('0'<=x && x<='9') return true;
    return false;
}
int x=0,y=0;
void Add(int l,int r){
    int r2=r;
    if (str[r-2]=='.'){
        r2=r-3;
        int temp=(str[r-1]-'0')*10+str[r]-'0';
        y+=temp;
    }
    int temp=0;
    for (int i=l;i<=r2;i++){
        if (str[i]=='.') continue;
        temp=temp*10+(str[i]-'0');
    }
    x+=temp;
}
int ans[10];
int main(){
    while (cin>>str){
        x=0,y=0;
        for (int i=0;str[i];i++){
            if (isNum(str[i])==true){
                int j;
                for (j=i;str[j];j++)
                    if (isNum(str[j])==false && str[j]!='.') 
                        break;
                Add(i,j-1);
                i=j;
            }
        }
        if (y>=100){
            x+=y/100;
            y%=100;
        }
        int k=0;
        int temp=x;
        while (temp){
            ans[k++]=temp%1000;
            temp/=1000;
        }
        if (k>0)
            cout<<ans[k-1];
        for (int i=k-2;i>=0;i--)
            printf(".%03d",ans[i]);
        if (k==0) cout<<0;
        if (y) printf(".%02d",y);
        cout<<endl;
    }
    return 0;
}

C. Guess the Array

题意

给出一个数组中任意两个数之和,让你猜这个数组

题意

将输入的看成是
(1)1和2
(2)1和3
(3)1和4

(4)1和n
(5)2和3
由(1)、(2)、(5)求出1、2、3的值,然后求出剩下的值。

参考代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int a[50005];
int b[50005];
int main(){
    int n;
    cin>>n;
    for (int i=0;i<n-1;i++){
        cout<<"? 1 "<<i+2<<endl;
        cin>>a[i];
    }
    cout<<"? 2 3"<<endl;
    cin>>a[n-1];
    b[1]=(a[0]-a[1]+a[n-1])/2;
    b[0]=a[0]-b[1];
    for (int i=1;i<n-1;i++)
        b[i+1]=a[i]-b[0];
    cout<<"! ";
    for (int i=0;i<n;i++)
        cout<<b[i]<<" ";
    cout<<endl;
    return 0;
}
提供了基于BP(Back Propagation)神经网络结合PID(比例-积分-微分)控制策略的Simulink仿真模型。该模型旨在实现对杨艺所著论文《基于S函数的BP神经网络PID控制器及Simulink仿真》中的理论进行实践验证。在Matlab 2016b环境下开发,经过测试,确保能够正常运行,适合学习和研究神经网络在控制系统中的应用。 特点 集成BP神经网络:模型中集成了BP神经网络用于提升PID控制器的性能,使之能更好地适应复杂控制环境。 PID控制优化:利用神经网络的自学习能力,对传统的PID控制算法进行了智能调整,提高控制精度和稳定性。 S函数应用:展示了如何在Simulink中通过S函数嵌入MATLAB代码,实现BP神经网络的定制化逻辑。 兼容性说明:虽然开发于Matlab 2016b,但理论上兼容后续版本,可能会需要调整少量配置以适配不同版本的Matlab。 使用指南 环境要求:确保你的电脑上安装有Matlab 2016b或更高版本。 模型加载: 下载本仓库到本地。 在Matlab中打开.slx文件。 运行仿真: 调整模型参数前,请先熟悉各模块功能和输入输出设置。 运行整个模型,观察控制效果。 参数调整: 用户可以自由调节神经网络的层数、节点数以及PID控制器的参数,探索不同的控制性能。 学习和修改: 通过阅读模型中的注释和查阅相关文献,加深对BP神经网络与PID控制结合的理解。 如需修改S函数内的MATLAB代码,建议有一定的MATLAB编程基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值