8.18集训笔记

发布时间 2023-08-18 14:00:56作者: HelloHeBin

上午递归,文件

点击查看代码
#include<bits/stdc++.h>
using namespace std;
//#define T long long
typedef long long LL; // 取别名,以后使用 LL 就是 long long
const int N=5e3+10;
LL fib[N];
LL f(int n){  // 递归
    if(n<=2) return 1;
    return f(n-1) + f(n-2);
}
int main(){
    fib[0]=fib[1]=1;  // 递推
    for(int i=2; i<N; i++) {
        fib[i] = fib[i-1] + fib[i-2];
//        cout<<i<<" : "<< fib[i]<<endl;
    }
    int n;cin>>n;
//    cout<<f(n)<<endl;
    cout<<fib[n]<<endl;
    return 0;
}
  • 汉诺塔
    【例】Hanoi(汉诺)塔问题。
    古代有一个梵塔,塔内有3个座A,B,C。开始时A座上有64个盘子,盘子大小不等,大的在下,小的在上。有一个老和尚想把这64个盘子从A座移到C座,但规定每次只允许移动一个盘,且在移动过程中在3个座上都始终保持大盘在下,小盘在上。在移动过程中可以利用B座。要求编程序输出移动盘子的步骤。
点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=110;
void hanoi(int n,char a,char b,char c){
    if(n==1){
        // printf("%c->%c\n",a,c);
        cout<<a<<" "<<c<<endl;
        return;
    }
    hanoi(n-1, a,c,b);
    hanoi(1, a,b,c);
    hanoi(n-1, b,a,c);
}
int main(){
    int n;  cin>>n; // scanf("%d", &n);
    hanoi(n,'A','B','C');
    return 0;
}
点击查看代码
#include<iostream>
using namespace std;
const int N=1e6+10, INF=0x3f3f3f3f;
typedef long long LL;

int p;
LL halfpow(int a,int n){
    if(n==1) return a;
    LL ans = halfpow(a, n/2);
    ans = ans*ans%p;
    if(n&1) ans=ans*a%p;
    return ans;
}
int main(){
    int a,b; scanf("%d%d%d",&a,&b,&p);
    LL s = halfpow(a, b);
    printf("%d^%d mod %d=%lld\n",a,b,p,s);
    return 0;
}

下午测试讲评