posts - 12,comments - 0,views - 2076

第四节数组

1.整体框架

#include <iostream>
using namespace std;
int a[1000000]={0};或int a[1000];//函数外面的变量,是在堆里面的,没有大小限制,但有内存限制64兆
int main()
{
    int a[数组的长度];//数组下标一定从0开始
    int a[3]={0,1,2};//定义一共长度为3的数组
    int a[]={0,3,2};//定义一共长度为3的数组
    int c[7]={2,4,5};//定义一共长度为5的数组,没有给出的值,默认是0
    char d[]={'a','b','c'};//定义一共长度为3的数组
    int f[10]={0};//将数组全部初始化为0的写法
    float c[11];
    double e[23];
    char e[9];
      const int a=10;               等价的书写方式:     int const a=10;
          const int arr[3]={1,2,3};                        int const arr[3]={1,2,3};
//const修饰一般常量及数组 、const 是 constant 的缩写,本意是不变的,不易改变的意思。在 C++ 中是用来修饰内置类型变量,自定义对象,成员函数,返回值,函数参数。
    string m[3];
    return 0;
}

2.基础知识

2.1多维数组

数组初始化:

int b[3][4]={
    {1,2,3,4},
     {2,3,4,5},
      {3,2,5,1}
};
#include <cstring>//清空数组
1byte=8bit;1KB=1024B1MB=1024KB,1GB=1024MB.一兆带宽=1Mb
   memset(a,0,40)//将函数初始化,时间更快
复制数组
int main()
{
    int a[10],b[10];
    for (int i=0;i<10;i++) a[i]=i;
    memcpy(b,a,sizeof a);//sizeof是复制多长
    for (int i=0;i<10;i++) cout << b[i] << ' ';
    return 0;
}
结果输出0 1 2 3 4 5 6 7 8 9

3.例题

1.数组实现2的n次方输出,有精度限制

#include <iostream>
using namespace std;
const int N=3010;

int main()
{
	int a[N]={1};
	int n;
	cin >> n;
	int m=1;
	for(int i=0;i<n;i++)
	{
		int t=0;
		for(int j=0;j<m;j++)
		{
			t=t+a[j]*2;
			a[j]=t%10;
			t=t/10;
		}
		if(t) a[m++]=1;
	}
	for (int i=m-1;i>=0;i--) cout<<a[i];
	cout<<endl;
 } 

2.输入n,输入n个数,逆序输出

#include <iostream>
using namespace std;
int main()
{
	int a[100];
	int n;
	cin >> n;
	for(int i=0;i<n;i++)cin>>a[i];
	for(int i=n-1;i>=0;i--)cout<<a[i]<<' ';
	cout<<endl;
	return 0;
}

3..输入n,输入n个数,旋转k次输出(1 2 3 4 5 旋转两次为4 5 1 2 3)

#include <iostream>
using namespace std;
int main(){
	int a[100];
	int n,k;
	cin >> n >>k;
	for(int i=0;i<n;i++) cin >> a[i];
	while(k--)
	{
		int t=a[n-1];
		for(int i=n-2;i>=0;i--)
			a[i+1]=a[i];// 依次后移 
		a[0]=t;//最后一个放在第一个 
	}
	for (int i=0;i<n;i++) cout << a[i] <<' ';
	return 0;
}
//第二种做法
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
    int a[100];
    int n,k;
    cin >> n >>k;
    for (int i=0;i<n;i++)cin >> a[i];
    reverse(a,a+n);
    reverse(a,a+k);
    for(int i=0;i<n;i++) cout << a[i]<< ' ';
    return 0;
}

4.数组和循环的结合运用,先读入数据再判断(忘记读入)

image-20221116164712438
#include <cstdio>
#include <iostream>
using namespace std;
int main()
{
    double A[100];
    for(int i=0;i<100;i++)
    cin>> A[i];
    for(int i=0;i<100;i++)
    {
        if(A[i]<=10)
        printf("A[%d] = %.1lf\n",i,A[i]);
    }
    return 0;
}

5.输入数组的数据

image-20221116172708586

输入格式

第一行输入一个大写字母,若为 S,则表示需要求出左方区域的元素的和,若为 M,则表示需要求出左方区域的元素的平均值。

接下来 1212 行,每行包含 1212 个用空格隔开的浮点数,表示这个二维数组,其中第 i+1i+1 行的第 j+1j+1 个数表示数组元素 M[i][j]M[i][j]。

输出格式

输出一个数,表示所求的平均数或和的值,保留一位小数。

数据范围

−100.0≤M[i][j]≤100.0

#include <cstdio>
#include <iostream>
using namespace std;
int main()
{
    char q;
    scanf("%c", &q);
    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 = 1; i <= 5; i ++ )
        for (int j = 0; j <= i - 1; j ++ )
        {
            s += a[i][j];
            c += 1;
        }

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

6.平方矩阵输出

image-20221118160924479 image-20221118160952082
#include <cstdio>//用到了到上下左右四条边的最小值,不好计算
#include <iostream>
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)) << ' ';
        }
        cout << endl;
        }
        cout << endl;

    }
    return 0;
    }

7.数组前后变换

image-20221118162306994
#include <cstdio>
#include <iostream>
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(int i=0;i<20;i++)
    {
        printf("N[%d] = %d\n",i,b[i]);
    }
    return 0;
}

8.求平方矩阵

image-20221120130923796
#include <cstdio>
#include <iostream>
using namespace std;
int q[100][100];
int main()
{
    int n;
    while(cin>>n,n)
    {
        for (int i = 0; i < n; i ++ )
        {
            q[i][i] = 1;
            for (int j = i + 1, k = 2; j < n; j ++, k ++ ) q[i][j] = k;
            for (int j = i + 1, k = 2; j < n; j ++, k ++ ) q[j][i] = k;
        }

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

    }
    return 0;
    }

9.image-20221120132356593

image-20221120132438440
#include <cstdio>
#include <iostream>
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;
}

10.蛇形矩阵:难难:偏移量

image-20221120134131549
//输出样例:
//1 2 3
//8 9 4
//7 6 5
#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;
}
posted on   cathyd  阅读(30)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
< 2025年3月 >
23 24 25 26 27 28 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 1 2 3 4 5

点击右上角即可分享
微信分享提示