翻转数组
#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;
}
翻转数组 reverse用法
#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);
reverse(a + k, a + n);
for (int i = 0; i < n; i++) cout << a[i] << ' ';
return 0;
}
判断精确度
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
const double eps=1e-6;//自定义判断精度 相当于极限里的无穷小 判断误差度量
int main()
{
int a,b;
cin>>a>>b;
if(fabs(a-b)<=eps) puts("相等");//fabs() 浮点数取绝对值函数
else if(a<b-eps) puts("小于");// abs()整数取绝对值函数
else puts("大于");
return 0;
}
高精度乘法运算 用数组存入数据 打破数据类型对数字位数的限制 用代码模拟手算过程
例题 计算2的N次方
#include<iostream>
#include<cstdio>
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+=a[j]*2;
a[j]=t%10;
t/=10;
}
if(t) a[m++]=1;
}
for(int i=m-1;i>=0;i--) cout<<a[i];
cout<<endl;
return 0;
}
acwing745 数组右上部分
#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<12;i++)
for(int j=i+1;j<12;j++)//看每一行列的起始位置
{
c++;
s+=a[i][j];
}
if(t=='S') printf("%.1f\n",s);
else printf("%.1lf\n",s/c);
return 0;
}
acwing747 数组左上部分
#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<12;i++)
for(int j=0;j<=10-i;j++)//看每一列终点与行数的关系
{
c++;
s+=a[i][j];
}
if(t=='S') printf("%.1f\n",s);
else printf("%.1lf\n",s/c);
return 0;
}
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;
}