C++ 语法基础课 习题4 —— 数组

news/2024/7/7 18:38:20

文章目录

  • 例题
    • 1. 数组替换
    • 2. 数组填充
    • 3. 数组选择
    • 4. 数组中的行
    • 5. 数组的右上半部分
    • 6. 数组的左上半部分
    • 7. 数组的上方区域
    • 8. 数组的左方区域
    • 9. 平方矩阵I(难题)
  • 习题
    • 1. 数组变换
    • 2. 斐波那契数列
    • 3. 最小数和它的位置
    • 4. 数组中的列
    • 5. 数组的右下半部分
    • 6. 数组的左下半部分
    • 7. 数组的下方区域
    • 8. 数组的右方区域
    • 9. 平方矩阵II(难题)
    • 10. 平方矩阵III(难题)
    • 11. 蛇形矩阵(难题)

例题

1. 数组替换

Acwing 737.数组替换

#include<iostream>
using namespace std;

int main()
{
    int x[10];
    for(int i = 0; i < 10; i++)
    {
        scanf("%d",&x[i]);// 输入 10 个数据
    }
    for(int i = 0; i < 10; i++)
    {
        if(x[i] <= 0)
        x[i] = 1;
    }
    for(int i = 0; i < 10; i++)
    {
      printf("X[%d] = %d\n",i,x[i]);
    }
    return 0;
}

2. 数组填充

Acwing 738.数组填充

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

int main()
{
    int a;
    scanf("%d",&a);
    int n[10];
    
    n[0] = a;// 这里不能加int
    for(int i = 1; i < 10;i++)
    {
        n[i]=n[i-1]*2;
    }
    for(int i = 0; i < 10; i++)
    {
        printf("N[%d] = %d\n",i,n[i]);
    }
}

3. 数组选择

Acwing 739.数组选择

#include<iostream>
using namespace std;

int main()
{
    double x[100];
    for(int i = 0; i < 100; i++)
    {
        scanf("%lf",&x[i]);
    }
    for(int i = 0; i < 100; i++)
    {
        if(x[i] <= 10)
        {
            printf("A[%d] = %.1lf\n", i, x[i]);
        }
    }
    return 0;
}

4. 数组中的行

Acwing 743.数组中的行

#include<iostream>
using namespace std;

int main()
{
    double m[12][12];
    int a;
    cin >> a;
    
    char b;
    cin >> b;
    
    double sum = 0;
    
    for(int i = 0;i < 12;i++)
        for(int j = 0;j < 12;j++)
        {
            scanf("%lf",&m[i][j]);
        }
        if(b == 'S')
        {
            for(int i = 0;i <12;i++)
            {
                sum += m[a][i];
            }
            printf("%.1lf\n",sum);
        }
        else if(b == 'M')
        {
            for(int i = 0;i < 12;i++)
            {
                sum += m[a][i];
            }
            double mean = sum / 12;
            printf("%.1lf\n",mean);
        }
    return 0;
}

5. 数组的右上半部分

Acwing 745.数组的右上半部分

#include<iostream>
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<12; i++)
        for(int j=i+1; j<12; j++)
        {
            c++;
            s+=a[i][j];
        }
        
    if(t == 'S') printf("%.1lf\n",s);
    else printf("%.1lf\n",s/c);
    
    return 0;
}

6. 数组的左上半部分

Acwing 747.数组的左上半部分

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

int main()
{
    char t;
    cin >> 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;// count
    double s = 0;// sum
    
    for(int i = 0; i < 12; i++)
        for(int j = 0; j <= 10-i;j++)
        {
            c++;
            s +=a[i][j];
        }
    
    if (t == 'S')printf("%.1lf\n",s);
    else printf("%.1lf\n",s/c);
    
    return 0;
}

7. 数组的上方区域

Acwing 749.数组的上方区域

#include<iostream>
#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("%.1lf\n",s);
    else printf("%.1lf\n",s/c);
    
    return 0;
}

8. 数组的左方区域

Acwing 751.数组的左方区域

#include <cstdio>
using namespace std;

int main()
{
    char t;
    double a[12][12];

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

    double s = 0, c = 0;
    for (int i = 0; i < 5; i ++ )
        for (int j = i + 1; j <= 10 - i; j ++ )
        {
            c += 1;
            s += a[j][i];// 将之前的算法进行行列互换
        }
    if (t == 'S') printf("%.1lf\n", s);
    else printf("%.1lf\n", s / c);

    return 0;
}

9. 平方矩阵I(难题)

Acwing 753.平方矩阵1

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

int main()
{
    int n;
    while(cin >> n, n)
    {
        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)) << ' ';// 求4个数那个最小
            }
            cout << endl;
        }
        cout << endl;
    }
    return 0;
}

习题

1. 数组变换

Acwing 740.数组变换

#include<iostream>
using namespace std;
 
int main()
{
    int a[20];
    for(int i = 0; i < 20; i++)
    {
        scanf("%d",&a[i]);
    }
    
    for(int i = 0; i < 20; i++)
    printf("N[%d] = %d\n",i,a[19-i]);
    
    return 0;
}

2. 斐波那契数列

Acwing 741.斐波那契数列

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

int main()
{
    long long f[61];
    f[0]=0, f[1]=1;//直接赋值,不可以用int f[0]=1
    for(int i= 2; i<=60;i++) f[i]=f[i-1]+f[i-2];
    int n;
    cin >> n;
    while(n--)// n个测试数据
    {
        int x;
        cin >> x;
        printf("Fib(%d) = %lld\n",x,f[x]);
    }
}

3. 最小数和它的位置

Acwing 742.最小数和它的位置

#include<iostream>
using namespace std;

int main()
{
    int n;
    cin >> n;// 输入n个数据
    
    int a[1000];
    for(int i = 0;i < n;i++)
    {
        scanf("%d",&a[i]);
    }
    
    int p = 0;
    for(int i=1;i<n;i++)
    {
        if(a[p]>a[i])
        {
            p=i;
        }
    }
    printf("Minimum value: %d\n",a[p]);
    printf("Position: %d",p);
}

4. 数组中的列

Acwing 744.数据中的列

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

int main()
{
    int a;
    cin >> a;// a表示第几列
    
    char b;// 输入字母
    cin >> b;
    
    double m[12][12];
    
    for(int i=0;i<12;i++)
        for(int j=0;j<12;j++)
            scanf("%lf",&m[i][j]);// 输入12*12个数据
    
    double sum=0;
    if(b =='S')// 求某一列的元素和
    {
        for(int i=0;i<12;i++)
        {
            sum+=m[i][a];
        }
        printf("%.1lf\n",sum);
    }

    else if(b == 'M')
    {
        for(int i = 0; i <12; i++)
            {
                sum+=m[i][a];
            }
        double mean = sum/12;// 第a列元素的平均值
        printf("%.1lf\n",mean);
    }
    return 0;
}

5. 数组的右下半部分

Acwing 748.数组的右下半部分

#include<iostream>
using namespace std;

int main()
{
    char t;
    scanf("%c",&t);
    
    double a[12][12];// 输入12*12个数据
    for(int i = 0; i < 12; i++)
        for(int j = 0;j < 12;j++)
         scanf("%lf",&a[i][j]);
    
    // i=1,j=11,j>10;i=2,j=11,j>9
    int c = 0;
    double s = 0;
    for(int i = 1;i < 12; i++)
        for(int j = 11;j > 11-i; j--)
        {
            c++;// 记录有多少个数据
            s+=a[i][j];
        }
    
    if(t =='S') printf("%.1lf\n",s);
    else printf("%.1lf\n",s/c);
    return 0;
}

6. 数组的左下半部分

Acwing 746.数组的左下半部分

#include<iostream>
#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]);
    
    double s = 0, c = 0;
    for(int i = 1; i< 12; i++)
        for(int j = 0; j<=i-1; j++)
        {
            c += 1;
            s += a[i][j];
        }
        
    if(t=='S') printf("%.1lf",s);
    else printf("%.1lf",s/c);
    
    return 0;
}

7. 数组的下方区域

Acwing 750.数组的下方区域

#include<iostream>
using namespace std;

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

8. 数组的右方区域

Acwing 752.数组的右方区域

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

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

9. 平方矩阵II(难题)

Acwing 754.平方矩阵II

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

int main()
{
    
    double a[100][100];
    int n;
    while(cin >> n,n)
    {
        for(int i=0;i<n;i++)
        {
            a[i][i]=1;
            for(int j=i+1;j<n;j++) a[i][j]=abs(i-j)+1;
            for(int j=i+1;j<n;j++) a[j][i]=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;
}

10. 平方矩阵III(难题)

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;
}

11. 蛇形矩阵(难题)

Acwing 756.蛇形矩阵

#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;
}

http://lihuaxi.xjx100.cn/news/163928.html

相关文章

Java语法之继承

上次给大家分享了Java的封装&#xff0c;今天小编给大家分享面向对象三大特性的第二大特性&#xff0c;也就是继承&#xff0c;fighting~~ 目录 &#x1f384;一.继承的概念 &#x1f384;1.1为什么需要继承 &#x1f384;1.2继承的概念 &#x1f384;1.3继承的语法 &#…

Activity 每个生命周期函数

onCreate():  表示 Activity 正在被创建&#xff0c;这是 Activity 生命周期的第一个方法。通常我们程序员要在 此函数中做初始化的工作&#xff0c;比如&#xff1a;绑定布局&#xff0c;控件&#xff0c;初始化数据等。 onStart():  表示 Activity 正在被启动&#xff0c;这…

一个数组的异或和是指数组中所有的数异或在一起的结果,给定一个数组arr,求最大子数组异或和。

问题描述&#xff1a; 一个数组的异或和是指数组中所有的数异或在一起的结果&#xff0c;给定一个数组arr&#xff0c;求最大子数组异或和。 异或运算规则&#xff1a; 异或也叫半加运算&#xff0c;其运算法则相当于不带进位的二进制加法&#xff1a;二进制下用1表示真&#x…

Tilemap瓦片资源

1、Tilemap Tilemap一般称之为 瓦片地图或者平铺地图&#xff0c;是Unity2017中新增的功能&#xff0c;主要用于快速编辑2D游戏中的场景&#xff0c;通过复用资源的形式提升地图多样性 工作原理就是用一张张的小图排列组合为一张大地图 它和SpriteShape都是用于制作2D游戏的…

Ajax笔记

Ajax笔记资源的请求方式一、概念1、Ajax作用2、jQuery中的Ajax二、$.get()函数的语法$.get()发起不带参数的请求$.get()发起带参数的请求三、$.post()函数的语法$.post()向服务器提交数据<font colorred>四、$.ajax()函数的语法使用$.ajax()发起GET请求使用$.ajax()发起P…

VMware虚拟机安装黑苹果步骤与常见问题,VMware16,MacOS12.01(Moterey)

资源准备&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1JFtpMVrULiky9l3SvCXX-w 提取码&#xff1a;c452 说明&#xff1a; 1.镜像版本10.14和12.01根据需要选择其一即可&#xff0c;10.14的后缀为cdr&#xff0c;12.01的后缀为ISO&#xff0c;这两种文件VMware都支…

JavaScript之BOM复习(54th)

1、BOM概述 1、BOM Browser Object Model 浏览器对象模型 2、它提供了独立于内容而与浏览器窗口进行交互的对象&#xff0c;其核心对象是 window 3、BOM 由一系列相关的对象构成&#xff0c;并且每个对象都提供了很多方法与属性 4、BOM 缺乏标准&#xff0c;JavaScript 语法的…

Lingo软硬件划分 实例

文章目录一、SM2 加密算法软硬件划分1.1 实验目标1.2 实验过程&#xff08;1&#xff09; 综合考虑使得系统整体性能最&#xff08;2&#xff09;只考虑硬面积&#xff0c;即系统硬件面积最小&#xff08;3&#xff09;只考虑功耗&#xff0c;即系统功耗最小&#xff08;4&…