29.求奇数的乘积

#include<iostream>
#include<queue>

using namespace std;

int main(){
    int n,x,sum=1;
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>x;
        if(x%2==1)
            sum*=x;
    }
    cout<<sum;
}




30.求最晚和最早日期

#include<iostream>
#include<queue>

using namespace std;

int main(){
    int n,y,m,d;
    cin>>n;
    int max_y=0,max_m=0,max_d=0;
    int min_y=2016,min_m=13,min_d=32;

    for(int i=0;i<n;i++){
        cin>>y>>m>>d;
        //
        if(y>max_y){
            max_y=y;
            max_m=m;
            max_d=d;
        }
        else if(y==max_y){
            if(m>max_m){
                max_m=m;
                max_d=d;
            }
            else if(m==max_m){
                if(d>max_d)
                    max_d=d;
            }
        }
        //
         if(y<min_y){
            min_y=y;
            min_m=m;
            min_d=d;
        }
        else if(y==min_y){
            if(m<min_m){
                min_m=m;
                min_d=d;
            }
            else if(m==min_m){
                if(d>min_d)
                    min_d=d;
            }
        }
    }
    cout<<max_y<<" "<<max_m<<" "<<max_d<<endl;
    cout<<min_y<<" "<<min_m<<" "<<min_d<<endl;
}




31.判断素数

#include<iostream>

using namespace std;

bool judge(int n){
    for(int i=2;i<n/2;i++){
        if(n%i==0){
            return false;
        }
    }
    return true;
}
int main(){
    int n,x;
    cin>>n;
    while(cin>>x){
        if(judge(x)){
            cout<<"yes"<<endl;
        }
        else
            cout<<"no"<<endl;
    }
}



32.计算e

问题描述

利用公式e=1+ 1/1! + 1/2! + 1/3! + ... + 1/n!,编程计算e的近似值,直到最后一项的绝对值小于threshold(该项不包括在结果内),输出e的值并统计累加的项数。

#include<iostream>
#include<iomanip>
#include<stdio.h>

using namespace std;

double jiecheng(int n){
    if(n==0)
        return 1;
    double sum=1;
    for(double i=1;i<=n;i++){
        sum*=i;
    }
    return sum;
}

int main(){
    int n=0;
    double threshold,sum=1;
    cin>>threshold;
    int i=0;
    double ans=0;
    while(1/jiecheng(i)>=threshold){
        ans+=1/jiecheng(i);
        i+=1;
    }
    printf("%.6lf %d",ans,i);
}

个人总结

1e-10表示10的-10次方

33.数字之和

#include<iostream>
#include<iomanip>
#include<stdio.h>

using namespace std;

int main(){
    int n;
    while(cin>>n){
        int sum=0;
        while(n>0){
            sum+=n%10;
            n/=10;
        }
        cout<<sum<<endl;
    }
}

34.繁殖问题

问题描述

有一家生化所,一月份引入一对新生的小白鼠。这对小白鼠生长两个月后,在第三、第四、第五个月各繁殖一对新小白鼠,在第六个月停止繁殖,在第七个月则死亡。新生的小白鼠也如此繁殖。问在第N个月时,活的小白鼠有多少对?

#include<iostream>
#include<vector>
#include<numeric>

using namespace std;

int main(){
    int n;
    while(cin>>n){
        vector<int> age(7,0);
        vector<int> newage(7,0);
        age[1]=1;
        int newborn=0;
        for(int j=0;j<n;j++){
            int newborn=age[3]+age[4]+age[5];
            for(int i=1;i<7;i++){
                if(i==1)
                    newage[i]=newborn;
                else{
                    newage[i]=age[i-1];
                }
            }
            age=newage;
        }
        cout<<accumulate(age.begin(),age.end(),0)<<endl;
    }
}
个人总结

题库里碰到的第一个dp问题,这类问题是我的弱项,难以构建递推公式。

根据AI的建议初步采用年龄分组法,age数组下标对应老鼠是几个月大的,age[i]对应该年龄的存活老鼠数量,每次循环经过一个月更新age数组,其中最多newage[6]=age[5],而不存在newage[7]=age[6],实现了六个月大的老鼠下个月去世的要求,

newborn=age[3]+age[4]+age[5];看似能实现记录上个月345个月大的老鼠数量得出新出生的老鼠数量,实际上理解错了,第一个月 出生,第二个月 成长,第三四五个月繁殖,第六个月不繁殖,第七个月死亡,应该是newborn=age[2]+age[3]+age[4];,但也不能AC。AI也无法通过该方法给出AC代码,暂未找到原因。

而且老鼠数量的增长是指数级的,应使用long long而不是int

#include<iostream>
#include<vector>
using namespace std;

int main(){
    int n;
    while(cin>>n){
        // 记录每月新生鼠数量
        vector<long long> newborn(51,0);
        vector<long long> total(51,0);
        
        newborn[1]=1;
        total[1]=1;
        
        for(int i=2;i<=n;i++){
            // 本月新生 = 3、4、5个月大的老鼠繁殖
            // 即:i-2、i-3、i-4月出生的老鼠
            long long new_born=0;
            if(i-2>=1) new_born+=newborn[i-2];
            if(i-3>=1) new_born+=newborn[i-3];
            if(i-4>=1) new_born+=newborn[i-4];
            
            newborn[i]=new_born;
            
            // 本月死亡 = 第7个月死亡
            // 即:i-6月出生的老鼠
            long long dead=(i-6>=1)?newborn[i-6]:0;
            
            // 本月总数
            total[i]=total[i-1]+new_born-dead;
        }
        
        cout<<total[n]<<endl;
    }
    return 0;
}

AC代码,还没有完全吃透,未能找到一般方法论。

计算机英语刘艺第五版unit12 英语翻译

        大部分人工智能的研究可以被归类为构建作出智慧行动的智能体,这意味着智能体的执行器的行为必须合理的回应通过其传感器接收的外部数据。因此,我们根据这些不同水平的回应将这类研究分类。

        最简单的一种回应是反射动作(reflex action),它是一种预先设定好的回应,应对预设的输入。为了得到更智能的行为需要更高水准的响应。比如,我们会用环境的知识信息增强智能体,使它们调整自己的行为以更加适应环境。扔棒球的过程大体上是一种反射动作,但是决定怎样扔和往哪里扔需要当前环境的信息。现实世界的信息该如何存储,更新,访问乃至最终应用于决策过程中,这将是人工智能领域中一个持久且极具挑战性的难题。

        如果我们想让智能体找到一个目标,比如赢一场棋局或穿过(maneuver)拥挤的通道,就需要另一个层级的响应。这种目标驱动(goal-directed)的行为表现需要智能体的响应或者响应的后续结果,会导致智能体有意地去形成一个行动计划,或者是在目前所有选项中找到最优解。

AI翻译对比

        人工智能领域的大量研究,都可以置于 构建能够智能行事的智能体 这一背景下进行界定。这意味着,智能体执行器的动作,必须是对其通过传感器接收到的数据所做出的 合理响应。相应地,我们可以根据这些响应的 不同层级 来对此类研究进行分类。

        最简明的回应是反射动作,它仅仅是对输入数据的一种预先设定的反应。要获得更“智能”的行为,则需要更高层级的响应。例如,我们可以赋予智能体关于其环境的知识,并要求它相应地调整自身行为。投掷棒球这一动作本身很大程度上是一种反射,但决定如何投掷以及投向何处,则需要知晓当前的环境信息。此类现实世界中的知识应如何存储、更新、访问,并最终应用于决策过程,至今仍是人工智能领域一项持续的挑战。

        如果我们希望智能体去追求一个目标——例如赢得一场象棋比赛,或是在拥挤的通道中穿行——那么就需要另一层级的响应。这种目标导向的行为要求智能体的响应(或一系列响应)必须是经过深思熟虑地制定行动计划,或是从当前可选方案中选出最佳行动的结果。

计算机英语单词扇贝打卡

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐