Go ashore_21

1.300到500能被3或7整除的偶数

1
2
3
4
5
6
7
8
#include<iostream>
using namespace std;
int main()
{
    for(int i = 300;i <= 500;i ++ )
        if((i%3==0||i%7==0)&&i%2==0) cout<<i<<" ";
    return 0;
}

2.16进制转10进制

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include<iostream>
#include<cstring> 
#include<cmath>
using namespace std;
int main()
{
    char a[100];
    int b[100],sum = 0,i,k = 0;
    cin>>a;
    int n = strlen(a);    //统计输入字符长度
    for(i = 0;a[i]!='\0';)
    {
        if((a[n-1-i]-'0')>=0&&(a[n-1-i]-'0')<=9)    //将字符数字转换为对应数字进行判断
        {
            b[i] = (a[n-1-i]-'0')*pow(16,i);    //倒序执行16的i次幂*转换后的数字,存入数组b中
            i++;
        }
        else
        {
            b[i] = ((a[n-1-i]-'0')-7)*pow(16,i);    //A(10)-F(15)进行转换
            i++;
        }
    }
    for(i = 0;i < n;i ++ ) 
        sum = sum + b[i];    //对存在数组b中的数字进行累加,即为转换后的10进制数
    cout<<sum<<endl;
    return 0;
}

3.String Compare

strcmp函数是 string compare (字符串比较) 的缩写,用于比较两个字符串,并根据比较结果返回整数。

基本形式为 strcmp(str1,str2),若str1=str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数。

即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止。如:

1."A"<"B"

2."A"<"AB"

3."Apple"<"Banana"

4."A"<"a"

5."compare"<"computer"

特别注意:strcmp(const char *s1,const char * s2)这里面只能比较字符串,即可用于比较两个字符串常量,或比较数组和字符串常量,不能比较数字等其他形式的参数。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
//strcmp实现
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
    char a[100],b[100];
    cin>>a>>b;
    int n = strcmp(a,b);
    cout<<n;
    return 0;
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
//自己写复现函数
#include<iostream>
using namespace std;
int strcmp(char *a,char *b)
{
    int n = 0;
    while(!(n = *a-*b) && *b)    //判断是否相等且循环没有结束
        a++,b++;    //对下一位进行判断
    if(n > 0) n = 1;
    else if(n < 0) n = -1;
    return n;
}
int main()
{
    char a[100],b[100];
    cin>>a>>b;
    cout<<strcmp(a,b);    //调用函数并输出
    return 0;
}

4.回文数

回文数:“回文”是指正读反读都能读通的句子,而回文数则是指正读反读都是同样的数。

设n是一任意自然数。若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数。例如,若n=1234321,则称n为一回文数;但若n=1234567,则n不是回文数。

反转两个数,相加后再反转输出

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include<iostream>
using namespace std;
int reverse(int s)    //定义反转函数reverse
{
    int r,m = 0;
    while(s!=0)
    {
        r = s % 10;    //从低位到高位逐一分离
        m = 10 * m + r;    //重新组合成整数
        s = s / 10;    //求商
    }
    return m;
}
int main()
{
    int n1,n2,m1,m2,sum,res;
    cin>>n1>>n2;
    m1 = reverse(n1);
    m2 = reverse(n2);
    sum = m1 + m2;
    res = reverse(sum);
    cout<<sum<<endl;
    cout<<res<<endl;
    return 0;
}

5.矩阵乘法

矩阵的M次幂,N为N乘N阶矩阵(输入M和N)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include<iostream>
using namespace std;
int main()
{
    int N,M;    //N为矩阵阶数,M为乘积次数
    int A[20][20],B[20][20],C[20][20];
    cin>>N>>M;
    for(int i = 1;i <= N;i ++ )    //输入矩阵元素
        for(int j = 1;j <= N;j ++ )
        {
            cin>>A[i][j];
            B[i][j] = A[i][j];
            C[i][j] = 0;
        }
    while(M>1)    //进行M次幂运算
    {
        for(int i = 1;i <= N;i ++ )    //计算第一次矩阵乘积
            for(int j = 1;j <= N;j ++ )
                for(int k = 1;k <= N;k ++ )
                    C[i][j] += B[i][k]*A[k][j];
        for(int i = 1;i <= N;i ++ )    //B保存C中元素,C置零
            for(int j = 1;j <= N;j ++ )
            {
                B[i][j] = C[i][j];
                C[i][j] = 0;
            }
        M--;
    }
    for(int i = 1;i <= N;i ++)    //输出结果
    {
        for(int j = 1;j <= N;j ++ )
            cout<<B[i][j]<<" ";
        cout<<endl;
    }
    return 0;
}

6.ASCII求和

字符串ASCII求和

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#include<iostream>
using namespace std;
int main()
{
    char c[100];
    cin>>c;
    int sum = 0;
    for(int i = 0;c[i] != '\0';i ++ )    //循环条件不等于空字符'\0'
        sum += c[i];
    cout<<sum<<endl;
    return 0;
}

7.螺旋矩阵1

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include<iostream>
using namespace std;
int change(int n)
{
    int l = 0,r = n-1,t = 0,b = n-1;
    int m[n][n];
    int num = 1;
    int tar = n*n;    //一共tar个元素
    while(num <= tar)
    {
        for(int i = l;i <= r;i ++ )
            m[t][i] = num++;    //left to right 
        t++;
        for(int i = t;i <= b;i ++ )
            m[i][r] = num++;    //top to bottom
        r--;
        for(int i = r;i >= l;i -- )
            m[b][i] = num++;    //right to left
        b--;
        for(int i = b;i >= t;i -- )
            m[i][l] = num++;    //bottom to top
        l++;
    }
    for(int i = 0;i < n;i ++ )
    {
        for(int j = 0;j < n;j ++ )
            cout<<m[i][j]<<" ";
        cout<<endl;
    }
}
int main()
{
    int n;cin>>n;
    change(n);    //调用函数
    return 0;
}

8.螺旋矩阵2

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include<iostream>
using namespace std;
int change(int n)
{
    int l = 0,r = n-1,t = 0;
    int m[n][n];
    int num = 1;
    int tar = n;    //标签tar等于n
    while(tar>=1)
    {
        for(int i = l;i <= r;i ++ )    //left to right 
            m[t][i] = num++;
        t++;
        tar--;
    }
    for(int i = 0;i < n;i ++ )    //输出
    {
        for(int j = 0;j < n;j ++ )
            cout<<m[i][j]<<" ";
        cout<<endl;
    }
}
int main()
{
    int n;cin>>n;
    change(n);
    return 0;
}

9.数字平移

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#include<iostream>
using namespace std;
int main()
{
    int n;cin>>n;
    int a[100],b[100];
    for(int i = 0;i < n;i ++ )
        cin>>a[i];
    int k;cin>>k;
    for(int i = k,j = 0;i < n;i ++ ,j ++ )
        b[j] = a[i];
    for(int i = n-k,j = 0;j < k;i ++ ,j ++)
        b[i] = a[j];
    for(int i = 0;i < n;i ++ )
        cout<<b[i]<<" ";
    return 0;
}

10.结构体和类的应用

输入多个日期,找出距离今天最远的三个日期

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include<iostream>
using namespace std;
struct time {
    int y;
    int m;
    int d;
    int num;   
};
int change(time a,time b)  //求间隔日期函数
{
    int t = 0;
    int s = 0;
    int u = 0;
    int ur[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
    int r[13] = { 0,31,29,31,30,31,30,31,31,30,31,30,31 };
    for (int i = a.y; i < b.y; i++)
    {
        if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0)
            s = s + 366;  //平年闰年判断
        else s = s + 365;
    }
    if (a.y % 4 == 0 && a.y % 100 != 0 || a.y % 400 == 0)
        for (int i = 1; i < a.m; i++)
            t = t + r[i];
    else
        for (int i = 1; i < a.m; i++)
            t = t + ur[i];
    if (b.y % 4 == 0 && b.y % 100 != 0 || b.y % 400 == 0)
        for (int i = 1; i < b.m; i++)
            u = u + r[i];
    else
        for (int i = 1; i < b.m; i++) 
            u = u + ur[i];
        int sum=s-t-a.d+u+b.d;
    return sum;  //返回间隔天数
}
int main()
{
    time temp,a[100];
    int n;
    cout<<"输入今天的日期:";
    cin>>a[0].y>>a[0].m>>a[0].d;
    cout<<"输入要判断的日期个数:";
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>a[i].y>>a[i].m>>a[i].d;
        cout<<endl;
    for(int i=1;i<=n;i++) //对输入日期依次判断
    {
        if(a[0].y<a[i].y)
            a[i].num=change(a[0],a[i]);
        else if(a[0].y>a[i].y)
            a[i].num=change(a[i],a[0]);
        else
            a[i].num=change(a[0],a[i]);
        if(a[i].num<0)
            a[i].num=-a[i].num;
    }
    for(int i=1;i<=n;i++) //冒泡排序
        for(int j=1;j<=n-i;j++)
           if(a[j].num<a[j+1].num)
           {
               temp=a[j];a[j]=a[j+1];a[j+1]=temp;
           }
    for(int i=1;i<=3;i++)  //输出间隔最远三个日期
        cout<<a[i].y<<" "<<a[i].m<<" "<<a[i].d<<" "<<a[i].num<<endl;
    return 0;
}

11.文件

文件流读取文件内的数字,输出第 k 个大小的数字

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include<iostream>
#include<fstream>
using namespace std;
int main ()
{
    int data,t,temp;
    int num;
    int a[1000];
    ifstream in("D:/a.txt");  //读取文件
    if (! in.is_open())
    { cout << "Error opening file"; exit (1); }
    while (!in.eof() )
    {
        in>>data;
        a[num] = data;   //对数字进行存储
        num++;
    }
    for(int i=0;i<num;i++)  //降序排序
      for(int j=0;j<num-i-1;j++)
        if(a[j]<a[j+1])
        {
             t=a[j];a[j]=a[j+1];a[j+1]=t;
        }
    cout<<"文件中共有数字为:"<<num-1<<endl;
    for(int i=0;i<num;i++)    //删除重复大小的数
    {
        for(int j=i+1;j<num;j++)
        {
            if(a[i]==a[j])
            {
                for(temp=j;temp<num;temp++)
                    a[temp]=a[temp+1];
                j--;
                num--;   //数组长度减一
            }
        }
    }
    cout<<"删除重复数字后为:"<<num<<endl;
    for(int i=0;i<num;i++)
        cout <<a[i]<<" ";
    int k;   //输入要求的k值
    cin>>k;
    cout<<"输出第"<<k<<"大的数为:"<<endl<<a[k-1]<<endl;
    return 0;
}
updatedupdated2023-01-072023-01-07