头像

微笑丶是我仅剩的骄傲




离线:1天前


活动打卡代码 AcWing 823. 排列

//这里填你的代码^^
//注意代码要放在两组三个点之间,才可以正确显示代码高亮哦~
#include <cstdio>

using namespace std;

const int N = 10;

int n;

void dfs(int u, int nums[], bool st[])
{
    if(u > n)
    {               
        for(int i = 1; i <= n; i++) printf("%d ", nums[i]);
        puts(" ");
    }
    else
    {
        for(int i = 1; i <= n; i++)
        {
            if(!st[i])
            {
                st[i] = true;
                nums[u] = i;
                dfs(u + 1, nums, st);
                st[i] = false; //恢复现场
            }
        }
    }
}

int main()
{
    scanf("%d", &n);
    int nums[N];
    bool st[N] = {0};

    dfs(1, nums, st);
    return 0;
}

i=1(st[1]==0)i=1
st[1]=1     //st[i]=true;
num[1]=1    //num[u]=i;
    i=1(st[1]==1,st[2]==0)i=2//缩进表示递归层数
    st[2]=1
    num[2]=2
        i=1(st[1,2]==1,st[3]==0)i=3
        st[3]=1
        num[3]=3
            u=4>3//输出num,并中止调用,此时输出123 
        st[3]=0//if结束时,恢复现场
    st[2]=0//if结束时,恢复现场
    i=3(st[3]==0)i=3
    st[3]=1
    num[2]=3
        i=1(st[1]==1,st[2]==0)i=2
        st[2]=1
        num[3]=2
            u=4>3
        st[2]=0
    st[3]=0
i=2(st[2]==0)i=2
//123 132 



活动打卡代码 AcWing 822. 走方格

//这里填你的代码^^
//注意代码要放在两组三个点之间,才可以正确显示代码高亮哦~
#include <iostream>

using namespace std;

int ans;
int m, n;

void dfs(int x, int y)
{
    if(x == m && y == n) ans++;
    else
    {
        if(x < m) dfs(x + 1, y);
        if(y < n) dfs(x, y + 1);
    }
}

int main()
{
    cin >> m >> n;
    dfs(0, 0);
    cout << ans << endl;
    return 0;
}


活动打卡代码 AcWing 821. 跳台阶

//这里填你的代码^^
//注意代码要放在两组三个点之间,才可以正确显示代码高亮哦~
//斐波那契数列
//a[n] = a[n - 1] + a[n - 2];
#include <iostream>

using namespace std;

int ans;
int n;

void f(int k)//一开始的k = 0
{
    if(k == n) ans++;
    else if(k < n)
    {
        f(k + 1);
        f(k + 2);
    }
}

int main()
{
    cin >> n;
    f(0);//传过去的值为0
    cout << ans << endl;
    return 0;
}


活动打卡代码 AcWing 817. 数组去重

//这里填你的代码^^
//注意代码要放在两组三个点之间,才可以正确显示代码高亮哦~
#include <iostream>

using namespace std;

int get_unique_count(int a[], int n)
{
    int cnt = 0;
    for(int i = 0; i < n; i++){
        bool is_exist = false;
        for(int j = 0; j < i; j++){
            if(a[j] == a[i]){
                is_exist = true;
                break;
            }
        }
        if(!is_exist) cnt++;
    }
    return cnt;
}

int main()
{
    int a[1000], n;
    cin >> n;
    for(int i = 0; i < n; i++) cin >> a[i];
    cout << get_unique_count(a, n) << endl;
    return 0;
}


活动打卡代码 AcWing 818. 数组排序

//这里填你的代码^^
//注意代码要放在两组三个点之间,才可以正确显示代码高亮哦~
#include <iostream>
#include <algorithm>

using namespace std;

/*void sort(int a[], int l, int r)
{
    int t;
    for(int i = l; i <= r - 1; i++){
        for(int j = i + 1; j <= r; j++){
            if(a[i] > a[j]){
                t = a[i];
                a[i] = a[j];
                a[j] = t;
            }
        }
    }
}*/

bool cmp(int a, int b)//实现从大到小排序的比较函数
{
    return a > b;
}

int main()
{
    int n, l, r;
    cin >> n >> l >> r;
    int a[n];
    for(int i = 0; i < n; i++) cin >> a[i];
    //sort(a, l, r);
    sort(a + l , a + r + 1, cmp);
    //sort函数调用在#include <algorithm>头文件下
    //sort函数的参数 sort(排序数组的起始地址,排序数组的最后一个元素的的下一个地址)
    //如果没有特殊说明,则按从小到大来排序
    //加入cmp实现从大到小
    for(auto x : a) cout << x << ' ';
    return 0;
}


活动打卡代码 AcWing 815. 打印字符串

//这里填你的代码^^
//注意代码要放在两组三个点之间,才可以正确显示代码高亮哦~
############################################################
char类型:
 char ch[100];
 读取方式:
 1.cin >> ch[i];//在读取时不读入空格
 2.fgets(ch, 100, stdin);
 3.scanf("%s", ch);
 4.cin.getline(ch, 100);//在读取时不需要考虑换行符
 5.cin.get(s, 100);
 //读入时需要考虑换行符,也就是说如果用get读取多行数据时,要把'\n'另外读出来,一般使用cin.get(ch, 100).get();
 6.gets()//在C++中会有问题,在C中可以用
 输出方式:
 1.cout << ch << endl;
 2.printf("%s", ch);//不用像string强制转化
 2.puts(ch);//但是会在输出最后有换行

#############################################################
string类型: 
 string str;
 读入方式:
 1.getline(cin, str);//会读入一整行,到回车结束
 2.cin >> str;//不读入空格,到空格结束
 3.scanf("%s", str.c_str());//读到空格结束
 输出方式:
 1.cout << str << endl;
 2.printf("%s", str.c_str());
 3.puts(str.c_str());
##############################################################


#include <iostream>

using namespace std;

void print(char str[])
{
    //printf("%s", str);
    cout << str;
}


int main()
{
    char str[101];
    fgets(str, 101, stdin);
    print(str);
    return 0;
}


活动打卡代码 AcWing 816. 数组翻转

//这里填你的代码^^
//注意代码要放在两组三个点之间,才可以正确显示代码高亮哦~
#include <iostream>

using namespace std;

/*void reverse(int a[], int size)
{
    int j = 0;
    int b[size];
    for(int i = size - 1; i >= 0; i--){
        b[j++] = a[i];
    }
    for(int i = 0; i < size; i++){
        a[i] = b[i];
    }
}*/

void reverse(int a[], int size)
{
    for(int i = 0, j = size - 1; i < j; i++, j--){
        swap(a[i], a[j]);
    }
}

int main()
{
    int m, n;
    cin >> m >> n;
    int a[m];
    for(int i = 0; i < m; i++) cin >> a[i];
    reverse(a, n);
    for(auto x : a) cout << x << ' ';
    return 0;
}



活动打卡代码 AcWing 814. 复制数组

//这里填你的代码^^
//注意代码要放在两组三个点之间,才可以正确显示代码高亮哦~
#include <iostream>

using namespace std;

void copy(int a[], int b[], int size)
{
    for(int i = 0; i < size; i++)
        b[i] = a[i];
}

int main()
{
    int n, m, size;
    cin >> n >> m >> size;
    int a[n], b[m];
    for(int i = 0; i < n; i++) cin >> a[i];
    for(int j = 0; j < m; j++) cin >> b[j];
    copy(a, b, size);
    for(auto x : b) cout << x << ' ';
}

#########################################################

#include <iostream>
#include <cstring>

using namespace std;

void copy(int a[], int b[], int size)
{
    memcpy(b, a, size * 4);//将a数组的前几个值赋值给b数组,要加size * Byte
    /*memset是将数组的值整体赋值为0 或者 -1;
    int array[n];
    memset(array, 0 / -1, n * int(Byte))*/
}

int main()
{
    int m, n, size;
    cin >> m >> n >> size;
    int a[m], b[n];
    for(int i = 0; i < m; i++) cin >> a[i];
    for(int i = 0; i < n; i++) cin >> b[i];

    copy(a, b, size);

    for(auto x : b) cout << x << ' ';
    return 0;
}


活动打卡代码 AcWing 809. 最小公倍数

//这里填你的代码^^
//注意代码要放在两组三个点之间,才可以正确显示代码高亮哦~
#include <iostream>

using namespace std;

int lcm(int a, int b)
{
    int t, i, r;
    if(a < b) t = a;
    else t = b;
    for(i = 1; ; i++){
        r = t * i;
        if(r % a == 0 && r % b == 0) break;
    }
    return r;
}

int main()
{
    int m, n;
    cin >> m >> n;
    cout << lcm(m, n) << endl;
    return 0;
}


活动打卡代码 AcWing 807. 区间求和

//这里填你的代码^^
//注意代码要放在两组三个点之间,才可以正确显示代码高亮哦~
#include <iostream>

using namespace std;

int sum (int i, int r)
{
    int add = 0;
    for(int j = i; j <= r; j++)
        add += j;
    return add;
}

int main()
{
    int m, n;
    cin >> m >> n;
    cout << sum(m, n) << endl;
    return 0;
}