文章目录
- 例题
- 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;
}