每日所学2024.11.25

代码实现矩阵转置

样例输入
2 4
34 76 -54 7
-4 5 23 9
样例输出

34 -4
76 5
-54 23
7 9
代码:

int main()
{
    int m, n;
    int a[20][20];
    int i, j;
    cin >> m >> n;
    for (i = 0; i < m; i++)
    {
        for (j = 0; j < n; j++)
        {
            cin >> a[j][i];
        }
    }
    for (i = 0; i < n; i++)
{
    for (j = 0; j < m; j++)
    {
        cout << a[i][j-1] << " ";
    }
    cout << endl;
}
    return 0;
}

闰年判断

if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0))
    monthDays[1] = 29;
else
    monthDays[1] = 28;
排序算法	平均时间复杂度	最好情况	最坏情况	空间复杂度	排序方式	稳定性
插入排序	O(n²)	O(n)	O(n²)	O(1)	In-place	稳定
冒泡排序	O(n²)	O(n)	O(n²)	O(1)	In-place	稳定
选择排序	O(n²)	O(n²)	O(n²)	O(1)	In-place	不稳定
快速排序	O(n log n)	O(n log n)	O(n²)	O(log n)	In-place	不稳定
希尔排序	O(n log n)	O(n log n)	O(n log n)	O(1)	In-place	不稳定
堆排序	O(n log n)	O(n log n)	O(n log n)	O(1)	In-place	不稳定
归并排序	O(n log n)	O(n log n)	O(n log n)	O(n)	Out-place	稳定
————————————————
全排列函数的使用
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int main()
{
      int a[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
      int res = 0;
      do
      {
         int x1 = a[0] + a[1] + a[2] + a[3];
         int x2 = a[3] + a[4] + a[5] + a[6];
         int x3 = a[6] + a[7] + a[8] + a[0];
         __________________;
      } while (next_permutation(a, a + 9));
      cout << res / 3 / 2 << endl;
      return 0;
}

结构体数组内部元素的排序
struct Node
{
    int s, c, d;
    bool operator<(const Node &t) const
    {
        if (s != t.s)
            return s < t.s;
        if (c != t.c)
            return c < t.c;
        return d < t.d;
    }
} sum[MAXN];



当不知道两个数谁大谁小时,可以写代码
if(a>b) swap(a,b);


数位DP

重点:
> 主要是写一个函数统计从1~n,数字i出现了多少次

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

int dgt(int n) // 计算整数n有多少位
{
    int res = 0;
    while (n) ++ res, n /= 10;
    return res;
}

int cnt(int n, int i) // 计算从1到n的整数中数字i出现多少次 
{
    int res = 0, d = dgt(n);
    for (int j = 1; j <= d; ++ j) // 从右到左第j位上数字i出现多少次
    {
        // l和r是第j位左边和右边的数字分别组成的整数 ; dj是第j位的数字
        int p = pow(10, j - 1), l = n / p / 10, r = n % p, dj = n / p % 10;
  //如果要统计的数字大于0,
        if (i) res += l * p;// 这里的l所有的情况是0~l-1,左边如果是l的话,右边就不能取到p种情况了
        //如果要统计的数字等于0,那么数字j左边就不能全为0,否则数字不成立,所以左边就少了全为0这种情况
        if (!i && l) res += (l - 1) * p; // 如果i = 0, 左边高位不能全为0(左边所有情况 001 ~ l - 1)
        // 计算第j位左边的整数等于l (视频中xxx = abc)的情况
        if ( (dj > i) && (i || l) ) res += p;
        if ( (dj == i) && (i || l) ) res += r + 1;//(这里加的一是加的右边全是0的情况)
    }
    return res;
}

int main()
{
    int a, b;
    while (cin >> a >> b , a)
    {
        if (a > b) swap(a, b);
        for (int i = 0; i <= 9; ++ i) cout << cnt(b, i) - cnt(a - 1, i) << ' ';
        cout << endl;
    }
    return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值