数组与循环

1.数组定义在函数外面

不用初始化默认为0,不占用栈空间,用堆空间

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 2e5+10;
int x[N];
int f[N];
signed main(){}

#define int long long

防止你忘记开long long,还有就是这样可以直接敲int,快一些。

不过要配套的改一下主函数前面的前缀 signed main(){},不能用int了, 因为主函数的返回值应该是0或者1

2.数组变换

(1)直接输出的暴力解法

#include <bits/stdc++.h> 
using namespace std;
#define int long long
signed main(){
	int n[21];
	for(int i=0;i<20;i++){
		cin>>n[i];
	}
	for(int j=19;j>=0;j–){
		cout<<”N[“<<(19-j)<<”] = “<<n[j]<<endl;
	}
}

(2)设两个相反数组解法

#include <bits/stdc++.h>
#define int long long
using namespace std;
signed main(){
	int a[21],b[21];
	for(int i=0;i<20;i){
		cin>>a[i];
	}
	for(int j=19,i=0;j>=0;j–-,i++){
		b[j]=a[i];
	}
	for(int i=0;i<20;i++){
		cout<<”N[“<<i<<”] = “<<b[i]<<endl;
	}
}
3.反转字符串
// 反转整个字符串
reverse(s.begin(),s.end());

// 反转两个字符
swap(s[i],s[j]);
4.定义不知道长度的数组

(1)定义一个一维数组

使用花括号 {} 直接赋值,数组大小由初始化的元素个数决定

int a[]={1,2,3,4,5};

如果手动定义数组长度,比如 double ary[5] = {1, 2, 3};,未初始化的元素会被默认填充为 0.0

尽量不使用变量定义数组长度,例如 int n = 10; double ary[n];

在部分版本编译器中会报错

(2)定义并初始化数组

{0,} 代表 第一个元素初始化为 0,其余元素自动填充为 0,等价于 int ans[10] = {0};

int a[10]={0,};

仅初始化第一个元素为 1,其他自动填充 0

int a[10]={1};

(3)使用 memset 进行内存初始化

memset(指针, 值, 大小) 初始化字节块 的函数。memset 逐字节填充 127,即 01111111,对应 ASCII DEL

memset(a,127,sizeof(a));

char 数组清零

char str[20];
memset(str,0,sizeof(str));

int 数组全部填充 0

memset(ans,0,sizeof(ans));

int 数组全部填充 -1

memset(ans,-1,sizeof(ans));

(4)大规模数据处理

const int N=2e5+10;
int A[N];
int B[N];

(5)使用 for 循环赋值

for(int i=-;i<n;i++){
	a[i]= 赋值语句;
}
5.斐波那契数列

注意大数值用long long,打印时用"%lld".

cout优点就是不用考虑变量的类型,可直接用cout

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 2e5+10;
int x[N];
int f[N];
signed main(){
    int a;
    cin>>a;
    f[0]=(int)0;
    f[1]=(int)1;
    for(int i=0;i<a;i++){
        cin>>x[i];
    }
    for(int i=2;i<61;i++){
        f[i]=f[i-2]+f[i-1];
    }
    for(int j=0;j<a;j++){
        cout<<"Fib("<<x[j]<<") = "<<f[x[j]]<<endl;
        //printf("Fib(%d) = %lld\n",x[j],f[x[j]]);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值