acwing 1.4习题及1.5字符串题解 矩阵规律 蛇形矩阵(微软面试题)

本篇所列题目中有关矩阵(数组)的关键点主要在于找行列规律 可以从行号+-列号 或总和中去找 在代码中自行体会
acwing749 数组上方区域

#include<cstdio>
using namespace std;
int main()
{
    char t;
    scanf("%c",&t);
    double a[12][12];

    for(int i=0;i<12;i++)
        for(int j=0;j<12;j++)
            scanf("%lf",&a[i][j]);
    int c=0;
    double s=0;

    for(int i=0;i<5;i++)
        for(int j=i+1;j<=10-i;j++) //根据行数判断起终点
        {
            c++;
            s+=a[i][j];
        }
    if(t=='S') printf("%.1f\n",s);
    else printf("%.1lf\n",s/c);

    return 0;
}


acwing753 平方数组 关键思路 判断一点到最外层的最小值

#include<iostream>
using namespace std;
int main()
{
    int n;
    while(cin>>n,n)//这里的while写法很巧妙
    {
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                int up=i,down=n-i+1,left=j,right=n-j+1;//上下左右四个点的距离
                cout<<min(min(up,down),min(left,right))<<' '; //找出四个数的最小值
                                                              //即为需要再矩阵中填充的数字
            }
            cout<<endl;
        }
        cout<<endl;
    }
}


acwing740 数组变换  还可以用之前用过的reverse进行数组翻转

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
    int a[20],b[20];

    for(int i=0;i<20;i++) cin>>a[i];
    for(int i=19,j=0;i>=0;i--,j++) b[j]=a[i];//for循环中两个变量很巧妙
    for(int i=0;i<20;i++) printf("N[%d]=%d\n",i,b[i]);
    return 0;
}

acwing741 斐波那契数列

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

int main()
{
    long long f[61]; //小心整数溢出
    f[0]=0,f[1]=1;

    for(int i=2;i<=60;i++) f[i]=f[i-1]+f[i-2];

    int n;
    cin>>n;
    while(n--)
    {
        int x;
        cin>>x;
        printf("Fib(%d)=%lld\n",x,f[x]);
    }
    return 0;
}


acwing742 找最小数

#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
    int a[100];
    int n;

    cin>>n;
    for(int i=0;i<n;i++) cin>>a[i];

    int p=0;
    for(int i=1;i<n;i++) // 判断最小
        if(a[i]<a[p])
            p=i;
    printf("Minimum value:%d\n",a[p]);
    printf("Postion: %d\n",p);

    return 0;
}


acwing744 数组中的列

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
    int c;
    char t;
    double q[12][12];

    cin>>c>>t;
    for(int i=0;i<12;i++)
        for(int j=0;j<12;j++)
            cin>>q[i][j];
    double s=0;
    for(int i=0;i<12;i++) s+=q[i][c];

    if(t=='S') printf("%.1lf\n",s);
    else printf("%.1lf\n",s/12);
    return 0;
}

acwing748数组的右下部分

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
    char t;
    cin>>t;
    double q[12][12];

    for(int i=0;i<12;i++)
        for(int j=0;j<12;j++)
            cin>>q[i][j];
    double s=0,c=0;
    for(int i=1;i<=11;i++)
        for(int j=12-i;j<=11;j++)
        {
            s+=q[i][j];
            c+=1;
        }
    if(t=='S') printf("%.1f\n",s);
    else printf("%.1lf\n",s/c);
    return 0;
}


acwing746 数组的左下部分

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
    char t;
    cin>>t;
    double q[12][12];
    for(int i=0;i<12;i++)
        for(int j=0;j<12;j++)
            cin>>q[i][j];

    double s=0,c=0;
    for(int i=0;i<12;i++)
        for(int j=0;j<i;j++)
        {
            s+=q[i][j];
            c+=1;
        }
    if(t=='S') printf("%.1f\n",s);
    else printf("%.1lf\n",s/c);

    return 0;
}


acwing750 数组的下方区域

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
     char t;
     cin>>t;
      
     double q[12][12];
     for(int i=0;i<12;i++)
         for(int j=0;j<12;j++)
             cin>>q[i][j];
         
     double s=0,c=0;
     for(int i=7;i<=11;i++)
         for(int j=12-i;j<=i-1;j++)
         {
             s+=q[i][j];
             c+=1;
         }
     if(t=='S') printf("%.1lf\n",t);
     else printf("%.1lf\n",s/c);
     return 0;
}


acwing752 数组的右方区域

#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
    char t;
    cin>>t;
    double q[12][12];

    for(int i=0;i<12;i++)
        for(int j=0;j<12;j++)
            cin>>q[i][j];
    double s=0,c=0;
    for(int i=1;i<=5;i++)
        for(int j=12-i;j<=11;j++)
        {
            s+=q[i][j];
            c+=1;
        }
    for(int i=6;i<=10;i++)
        for(int j=i+1;j<=11;j++)
        {
            s+=q[i][j];
            c+=1;
        }
    if(t=='S') printf("%.1lf\n",s);
    else printf("%.1lf",s/c);
    return 0;
}


acwing754 平方矩阵II 观察坐标和数字的关系

#include<iostream>
using namespace std;
int main()
{
    int n, a[110][110];
    while(cin >> n, n)
    {
        for (int i = 0; i < n; i ++ )
        {
            for (int j = 0; j < n; j ++ )
                a[i][j] = abs(i - j) + 1;
        }

        for (int i = 0; i < n; i ++ )
        {
            for (int j = 0; j < n; j ++ ) cout << a[i][j] << ' ';
            cout << endl;
        }
        cout << endl;
    }
    return 0;
}


acwing 755平方矩阵III

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

int main()
{
    int n;
    while(cin>>n,n)
    {
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                int v=1;
                for(int k=0;k<i+j;k++) v*=2;
                cout<<v<<' ';
            }
            cout<<endl;
        }
        cout<<endl;
    }
    return 0;
}


acwing756 蛇形矩阵 蓝桥真题 偏移量技巧

#include<iostream>
using namespace std;
int res[100][100];
int main()
{
    int n,m;
    cin>>n>>m;

    int dx[]={0,1,0,-1},dy[]={1,0,-1,0};

    for(int x=0,y=0,d=0,k=1;k<=n*m;k++)
    {
        res[x][y]=k;
        int a=x+dx[d],b=y+dy[d];
        if(a<0||a>=n||b<0||b>=m||res[a][b])
        {
            d=(d+1)%4;
            a=x+dx[d],b=y+dy[d];
        }
        x=a,y=b;
    }
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++) cout<<res[i][j]<<' ';
        cout<<endl;
    }
    return 0;
}


字符串从指定序号输出

#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
    char a2[]={'A','B','C','\0'};
    char a3[]="ABCDEF";

    cout<<a2+1<<endl;//从序号0开始 想从第几个序号输出就在数组名后加上几
    printf("%s\n",a3+2);

    return 0;
}


读入 与输出相同

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
    char s[100];

    cin>>s+1;
    cout<<s<<endl;

    return 0;
}


fgets函数 读入一行字符穿到字符数组里

#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
    char s[100];
    char p[100];
    fgets(s,100,stdin);
    fgets(p,100,stdin);
    cout<<s<<endl;
    cout<<p<<endl;
    return 0;
}


getline用法 但不输出空格

#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
    string s;
    string p;
    getline(cin,s);
    getline(cin,p);
    cout<<s<<endl;
    cout<<p<<endl;
    return 0;
}


fgets函数 读入一行字符穿到字符数组里 读入的回车也会被输出

#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
    char s[100];
    char p[100];
    fgets(s,100,stdin);
    fgets(p,100,stdin);
    cout<<s<<endl;
    cout<<p<<endl;
    return 0;
}


 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值